【问题标题】:xbuild fails to embed resources from shared projectxbuild 无法嵌入共享项目中的资源
【发布时间】:2017-04-27 09:15:13
【问题描述】:

我有一个位于 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 目标)->

C:\Program Files (x86)\Mono\lib\mono\xbuild\14.0\bin\Microsoft.Common.targets: 错误:无法将 FolderA\C.gz 复制到 FolderA\obj\Release\C.gz,因为源文件不存在。

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

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

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


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

【问题讨论】:

    标签: c# mono xbuild


    【解决方案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" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-06
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多