2017-04-27 103 views
0

嵌入资源我有一个C#项目位于FolderA它引用共享项目。共享项目的文件位于FolderB。共享项目包含一个文件C.gz与属性xbuild未能从共享项目

Build ActionEmbedded Resource
Copy to Output DirectoryDo Not Copy

当我尝试建立使用xbuild(具体版本4.8和4.8.1,x86和x64架构项目 ):

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: error : Cannot copy FolderA\C.gz to FolderA\obj\Release\C.gz, as the source file doesn't exist.

xbuild搜索嵌入的资源文件中FolderA尽管它明显地位于FolderB中与所述共享项目的其他文件一起。

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

有没有别的东西我可以做,使项目一个成功地与xbuild构建?


附注:这是xbuild预期的行为,或者是一个错误吗?用msbuild我没有这个问题。

回答

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" />