7

我第一次使用 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 在构建目录中找到程序集?

4

2 回答 2

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>
于 2012-09-17T20:13:43.483 回答
3

尝试在 *.nuspec 文件中定义文件部分,在 VS 属性中将复制Copy to Output Directory属性设置为Copy always或为它们设置。Copy if newer之后,您编译的所有文件和 nuspecs 都将位于$(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>
于 2012-09-14T05:43:49.007 回答