我第一次使用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>
现在构建将程序集重定向到构建目录,当我运行pack时,NuGet无法找到它们。如何让NuGet在构建目录中找到程序集?
答案 0 :(得分:15)
为NuGet提供一个TargetPath属性,以便在哪里找到程序集。
<Target Name="AfterBuild" Condition="'$(Configuration)' == 'Release' ">
<!-- package with NuGet -->
<Exec WorkingDirectory="$(BaseDir)" Command="$(NuGetExePath) pack -OutputDirectory $(OutDir) -Symbols -Prop Configuration=$(Configuration);TargetPath=$(OutDir)$(AssemblyName)$(TargetExt)" />
</Target>
答案 1 :(得分:3)
尝试在* .nuspec文件中定义文件部分,在VS属性中为它们设置复制Copy to Output Directory
属性为Copy always
或Copy if newer
。之后,所有编译的文件和nuspec都将在$(OutputPath)
中。然后将AfterBuild更改为:
<Target Name="AfterBuild">
<PropertyGroup>
<NuspecPath>$([System.IO.Path]::Combine($(OutputPath), "$(ProjectName).nuspec"))</NuspecPath>
</PropertyGroup>
<!-- package with NuGet -->
<Exec WorkingDirectory="$(BaseDir)" Command="$(NuGetExePath) pack $(NuspecPath) -Verbose -OutputDirectory $(OutDir) -Symbols -Prop Configuration=$(Configuration)" />
</Target>