【发布时间】:2017-08-01 12:56:08
【问题描述】:
Project1.csproj 包含一个导入语句,它应该(在理想情况下)导入 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 定义的资源,例如图标。即使构建成功,资源也不包含在最终的可执行文件中。
我到底做错了什么?将 Project1.csproj 中的 import 语句替换为 ItemGroup 资源定义会导致工作程序。
我的目标是导入外部定义的资源列表,我认为可以通过导入另一个项目来完成。
【问题讨论】:
-
可能将资源添加到 Resource ItemGroup 为时已晚,因为它们位于解析全局 ItemGroups 之后运行的目标中,因此在 BeforeBuild 运行之前引用 ItemGroup 的其他一些组件没有看到他们.. 他们必须在目标中吗?如果没有,那可能只是解决问题。
-
另外,根据
<Import>在源文件中的位置,BeforeBuild目标可能会被覆盖。但是,我还建议将项目放在目标之外。 -
@stijn 将项目移出
Target并将Import放在Project1.csproj 的末尾确实解决了这个问题。如果您发布,我将接受您或 Martin Ullrich 的回答。
标签: c# visual-studio msbuild