2017-08-01 63 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來記錄你的代碼他留言任務,如果你想深入挖掘找到根本原因。

相關問題