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

xbuild fails to embed resources from shared project

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

Build Action Embedded Resource
Copy to Output Directory Do Not Copy

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

xbuild A.csproj

我收到以下构建错误:

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

C:\Program Files (x86)\Mono\lib\mono\xbuild.0\bin\Microsoft.Common.targets: error : Cannot copy FolderA\C.gz to FolderA\obj\Release\C.gz, as the source file doesn't exist.

xbuildFolderA 中搜索嵌入的资源文件,尽管它显然与其他文件一起位于 FolderB 中共享项目的文件 B.

我将嵌入的资源文件移动到项目 A 不是一个可行的选择,因为共享项目也被其他几个项目引用。

我还能做些什么来使项目 A 使用 xbuild 成功构建?


旁注:这是 xbuild 中的预期行为,还是一个错误?使用 msbuild 我没有这个问题。

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

由于 xbuild 期望嵌入的资源文件在 FolderA 文件夹中可用,我只是在项目文件:

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

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

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

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