2017-08-01 65 views
1

Project1.csproj包含一个import语句,它应该(在理想的情况下)进口Project2的:.csproj的文件不正确导入其他项目

<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中的导入语句会生成工作程序。

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

+0

可能资源被添加到Resource ItemGroup的时间太晚了,因为它们位于解析全局ItemGroups后运行的目标中,并且导致在BeforeBuild运行之前引用ItemGroup的其他组件不能看到它们。他们必须在目标?如果没有,那可能只是解决了这个问题。 – stijn

+0

另外,根据''放置在源文件中的位置,可能会覆盖'BeforeBuild'目标。但是,我也建议将这些项目放在目标之外。 –

+0

@stijn将Items移出Target并将Import放置在Project1.csproj的末尾确实解决了这个问题。如果您发布,我会接受您或Martin Ullrich的回答。 – ViliX64

回答

2

导入不是问题在这里:导入文件类似于将其内容复制到导入发生的位置。

  • (马丁评论,因为它被重写,或者是因为it is not even considered for execution)目标不运行在所有
  • 目标运行,但是:问题是资源项目被一个目标,要么加内通过这种情况发生的另一个组件,它需要获得资源包含在可执行文件已经跑了已经照顾,因此只考虑没有你的项目的第一个全球性的ItemGroup定义添加到它的时间

所以移动的ItemGroup出来的Target解决了这个问题,你可以通过t来记录你的代码他留言任务,如果你想深入挖掘找到根本原因。

相关问题