7

.csproj ファイルの AfterBuild ターゲットを使用して、初めて NuGet パックを使用しています。

<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 で見つけることができます。

ただし、このプロジェクトはソリューション内の多くのプロジェクトの 1 つであり、ソリューション全体のビルド専用のビルド ファイルがあります。ディレクトリ ツリーは次のようになります。

- 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 にビルド ディレクトリ内のアセンブリを検索させるにはどうすればよいですか?

4

2 に答える 2

15

アセンブリを見つける場所の TargetPath プロパティを 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>
于 2012-09-17T20:13:43.483 に答える
3

* .nuspecファイルでファイルセクションを定義し、コピープロパティをVSプロパティでそれらに設定してみてCopy to Output Directoryください。その後、コンパイルしたすべてのファイルとnuspecsがになります。次に、AfterBuildを次のように変更します。Copy alwaysCopy if newer$(OutputPath)

<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 に答える