xbuild无法嵌入共享项目中的资源

时间:2017-04-27 09:15:13

标签: c# mono xbuild

我在 FolderA 中有一个C#项目 A ,它引用了共享项目 B 。共享项目的文件位于 FolderB 中。共享项目 B 包含一个文件 C.gz ,其属性为

  

构建操作 嵌入式资源
  复制到输出目录 不复制

当我尝试使用 xbuild (特别是版本4.8和4.8.1,x86和x64架构)构建项目 A 时:

xbuild A.csproj

我收到以下构建错误:

  

C:\ Program Files(x86)\ Mono \ lib \ mono \ xbuild \ 14.0 \ bin \ Microsoft.Common.targets(CopyNonResxEmbeddedResources target) - >

     

C:\ Program Files(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 中的预期行为,还是一个错误?使用 msbuild ,我没有这个问题。

1 个答案:

答案 0 :(得分:1)

此问题似乎是当前 xbuild 实现中的一个缺陷,因此我需要针对此问题应用特定的解决方法。

由于 xbuild 希望嵌入式资源文件在 FolderA 文件夹中可用,我只需在项目文件中添加预构建步骤:

<ItemGroup>
  <FilesToCopy Include="..\FolderB\C.gz" />
</ItemGroup>
<Target Name="BeforeBuild">
  <Copy SourceFiles="@(FilesToCopy)" DestinationFolder="."/>
</Target>

可选地,通过在构建后删除复制的文件,可以考虑在构建之后进行清理。

注意!为了确保正确地考虑预构建步骤,请确保在这一行之后将其放置

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />