C#孙子项目DLL不包含在msbuild包中

Sco*_*y H 16 c# msbuild dll dependencies azure-web-sites

我有一个C#项目X引用一个C#项目Y引用一个C#项目Z.所以依赖链看起来像这样:X => Y => Z.没有直接/显式依赖X => Z.当我构建时使用msbuild命令发布的包

msbuild DesignService.csproj /m /p:Configuration="Debug" /p:Platform="AnyCPU" /verbosity:quiet /t:Package /p:PackageLocation=X.zip /p:PackageAsSingleFile=True
Run Code Online (Sandbox Code Playgroud)

我得到一个包含X和Y的DLL的zip文件,但不是Z.然后当包发布时(到Azure应用服务),当调用Z中的代码时,我得到运行时错误,说DLL不能找到.如果我在X中添加Z作为直接/显式引用,它就可以正常工作.但我认为我不应该这样做.

如何在我的发布包中从msbuild获取Z的DLL而不在X中添加显式引用?

Joe*_*Cai 1

为什么会出现这种情况

\n\n

X.csproj 被调用,并且因为它有一个对 Y.csproj 的项目引用,所以它调用 Y.csproj \xe2\x80\x94,它 \xe2\x80\x9c 围绕着后面 \xe2\x80\x9d。Z.csproj 尚未构建\xe2\x80\x99,因此构建中断。

\n\n

怎么修

\n\n

遵循以下原则:根本不使用解决方案文件中表达的依赖项。

\n\n

您可以在项目中放置一个项目引用。\n 看起来像这样 \xe2\x80\x93 记下元数据元素,当然所有这些都在标签内<ItemGroup>

\n\n
<ProjectReference Include=\xe2\x80\x9d\xe2\x80\xa6 foo.csproj\xe2\x80\x9d> \n    <ReferenceOutputAssembly>false</ReferenceOutputAssembly> \n</ProjectReference>\n
Run Code Online (Sandbox Code Playgroud)\n\n

虽然必须以这种方式编辑项目以使错误消失是很烦人的,但最好使用项目引用并将解决方案文件视为 \xe2\ x80\x9cview\xe2\x80\x9d。

\n\n

您\xe2\x80\x99最终会得到一些项目,如果您愿意,可以在没有解决方案文件的情况下构建这些项目。

\n\n

有关如何解决该问题的更多详细信息,您可以参考此博客

\n