我第一次使用 NuGet 包,使用 .csproj 文件中的 AfterBuild 目标。
<Target Name="AfterBuild">
<!-- package with NuGet -->
<Exec WorkingDirectory="$(BaseDir)" Command="$(NuGetExePath) pack -Verbose -OutputDirectory $(OutDir) -Symbols -Prop Configuration=$(Configuration)" />
</Target>
这在使用 msbuild(“msbuild MyProj.csproj”)构建项目本身时工作正常。NuGet 能够在 projectdir/bin/Release 或 projectdir/bin/Debug 中找到已编译的程序集。
但是,该项目是解决方案中的众多项目之一,并且有一个专门用于构建整个解决方案的构建文件。目录树是这样的:
- project root
- build
- src
- MyProj
- MyProj.csproj
- MyProj.nuspec
- AnotherProj
- AnotherProj.csproj
- AnotherProj.nuspec
- project.proj (msbuild file)
此 msbuild 文件将覆盖 Visual Studio 生成的输出路径。
<PropertyGroup>
<CodeFolder>$(MSBuildProjectDirectory)\src</CodeFolder>
<CodeOutputFolder>$(MSBuildProjectDirectory)\build\$(Configuration)</CodeOutputFolder>
</PropertyGroup>
<Target Name="Build" DependsOnTargets="CleanSolution">
<Message Text="============= Building Solution =============" />
<Message Text="$(OutputPath)" />
<Message Text="$(BuildTargets)" />
<MsBuild Projects="$(CodeFolder)\$(SolutionName)"
Targets="$(BuildTargets)"
Properties="Configuration=$(Configuration);RunCodeAnalysis=$(RunCodeAnalysis);OutDir=$(OutputPath);" />
</Target>
现在构建将程序集重定向到构建目录,当我运行包时,NuGet 找不到它们。如何让 NuGet 在构建目录中找到程序集?