NuGet pack和msbuild-如何在其他位置打包引用程序集?
我第一次使用NuGet pack,使用.csproj文件中的后构建目标NuGet pack和msbuild-如何在其他位置打包引用程序集?,msbuild,nuget,Msbuild,Nuget,我第一次使用NuGet pack,使用.csproj文件中的后构建目标 <Target Name="AfterBuild"> <!-- package with NuGet --> <Exec WorkingDirectory="$(BaseDir)" Command="$(NuGetExePath) pack -Verbose -OutputDirectory $(OutDir) -Symbols -Prop Configuration=$(Configu
<Target Name="AfterBuild">
<!-- package with NuGet -->
<Exec WorkingDirectory="$(BaseDir)" Command="$(NuGetExePath) pack -Verbose -OutputDirectory $(OutDir) -Symbols -Prop Configuration=$(Configuration)" />
</Target>
此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>
$(MSBuildProjectDirectory)\src
$(MSBuildProjectDirectory)\build\$(配置)
既然构建将程序集重定向到构建目录,那么当我运行pack时,NuGet找不到它们。如何让NuGet在生成目录中查找程序集?尝试在*.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>
$([System.IO.Path]::合并($(OutputPath),“$(ProjectName.nuspec”))
为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>
我确实让它这样工作,但它失去了使用.csproj替换令牌的惯例。我也添加了一个答案,你认为它比较好吗?在这种情况下,你的解决方案看起来更好,绝对正确。我忘了换代币了。但除了关于codeplex的一些讨论之外,我没有找到关于TargetPath属性的文档。它在任何地方都有文档记录吗?没有很好的文档记录,我想我通过codeplex、一些博客文章、nuget目标文件和源代码找到了它。
<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>