.csproj文件没有正确导入其他项目

时间:2017-08-01 12:56:09

标签: c# visual-studio msbuild

Project1.csproj包含一个import语句,应该(在理想情况下)导入Project2:

<Import Project="Project2.targets"/>

Project2.targets只包含资源导入列表:

<Project DefaultTargets="BeforeBuild"  
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
<Target Name="BeforeBuild">   
  <ItemGroup>
    <Resource Include="resources\logo.png" />
  </ItemGroup>
  <ItemGroup>
    <Resource Include="resources\icon.ico" />
  </ItemGroup>
</Target>
</Project>  

在Project1中,元素使用这些Project2定义的资源,例如图标。即使构建成功,资源也不会包含在最终的可执行文件中。

我究竟做错了什么?使用ItemGroup资源定义替换Project1.csproj中的import语句会导致工作程序。

我的目标是导入外部定义的资源列表,我认为可以通过导入另一个项目来完成。

1 个答案:

答案 0 :(得分:2)

导入不是问题所在:导入文件类似于将其内容复制到导入发生的位置。问题是资源项目正在目标中添加:

  • 目标根本不运行(因为它被马丁评论,或因为it is not even considered for execution)而被覆盖
  • 目标运行,但到了发生的时候,另一个负责获取可执行文件中包含的资源的组件已经运行了,因此只考虑了没有添加项目的第一个全局ItemGroup定义

因此,将ItemGroup移出目标会修复此问题,如果您想深入了解根本原因,可以通过Message任务对一些日志进行检测。