我在FolderA中有一个FolderA项目A,它引用一个共享项目B。共享项目的文件位于FolderB中。共享项目B包含一个具有以下属性的文件C.gz
构建动作嵌入式资源 复制到输出目录不复制
当我尝试使用x build (特别是4.8和4.8.1版本,x86和x64体系结构)构建项目A时:
xbuild A.csproj我得到以下构建错误:
C:\Program (x86)\Mono\lib\mono\xbuild\14.0\bin\Microsoft.Common.targets (CopyNonResxEmbeddedResources目标) -> C:\Program (x86)\Mono\lib\mono\xbuild\14.0\bin\Microsoft.Common.targets:错误:无法将FolderA\C.gz复制到FolderA\obj\Release\C.gz,因为源文件不存在。
也就是说,xbuild搜索FolderA中的嵌入式资源文件,尽管它显然与共享项目B的其他文件一起位于FolderB中。
将嵌入式资源文件移动到项目A并不是一个可行的选择,因为共享项目也是从其他几个项目中引用的。
为了成功地使用xbuild成功地构建项目A,我还能做些什么吗?
附带注意:这是xbuild中的一个预期行为,还是一个bug?对于msbuild,我没有这个问题。
发布于 2017-05-03 06:34:05
这个问题似乎是当前xbuild实现中的一个缺陷,因此我需要针对这个问题应用一个特定的解决方案。
由于xbuild期望嵌入的资源文件可以在FolderA文件夹中使用,所以我只需在项目文件中添加一个预构建步骤:
<ItemGroup>
<FilesToCopy Include="..\FolderB\C.gz" />
</ItemGroup>
<Target Name="BeforeBuild">
<Copy SourceFiles="@(FilesToCopy)" DestinationFolder="."/>
</Target>另外,还可以考虑在构建后通过删除生成后复制的文件来进行清理。
Note!为了确保预构建步骤的定义正确,请确保将其放在该行后面:
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />https://stackoverflow.com/questions/43653553
复制相似问题