xbuild未能从共享项目
嵌入资源我有一个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我没有这个问题。
此问题似乎是目前xbuild实施中的缺陷,所以我需要应用针对此问题的特定解决方法。
由于xbuild预计,嵌入的资源文件是在FolderA文件夹中,我只需添加在项目文件的生成前阶段:
<ItemGroup>
<FilesToCopy Include="..\FolderB\C.gz" />
</ItemGroup>
<Target Name="BeforeBuild">
<Copy SourceFiles="@(FilesToCopy)" DestinationFolder="."/>
</Target>
可选,人们还可以考虑通过在构建后删除复制的文件来构建之后进行清理。
注意!为确保预生成步骤正确地考虑,请务必将其后,这条线:
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />