4

ソリューションの 2 つのプロジェクトにFody ProperyChangedを追加しました。ソリューションでパッケージの復元が有効になっています。ただし、TFS ビルド サービスは次のエラーでビルドに失敗します。

WindowsUI.csproj (443): インポートされたプロジェクト "SolutionDir\Tools\Fody\Fody.targets" が見つかりませんでした。宣言内のパスが正しいこと、およびファイルがディスク上に存在することを確認してください。

フォルダは実際にはありません。明らかに、ソース管理にチェックインできました。ただし、NuGet パッケージの復元によってデータが取り込まれるべきではありませんか? それとも、NuGet Package Restore の機能を誤解していますか?

4

4 に答える 4

3

Visual Studio Online でビルドするソリューションを取得しようとして、同様の問題に遭遇しました。問題は、プロジェクトのビルド前にパッケージが復元されることですが、その前に、プロジェクト ファイルとパッケージからのターゲット インクルージョン (まだ復元されていません) が既に解釈されています。

ここで説明されているように、ビルド前フックを使用します。

http://sedodream.com/2010/10/22/MSBuildExtendingTheSolutionBuild.aspx

before.solutionname.sln.targets ファイルに次のようなものを入れて、最初のプロジェクトがビルドされる前にすべてのパッケージを強制的に復元します。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0"
     DefaultTargets="Build"
     xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<Target Name="BeforeBuild" BeforeTargets="Build">
 <Message Text="Restoring all nuget packages before build" Importance="high">
 </Message>
<Exec Command=".\.nuget\NuGet.exe restore YourSolution.sln" />
</Target>
</Project>

外部パッケージ ソースがある場合は、.nuget フォルダーにもある nuget.config ファイルでそれらを構成します。例えば:

<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
  <packageSources>
    <add key="NuGet official package source" value="https://nuget.org/api/v2/" />
    <add key="YourSource" value="http://yoursource.somewhere.net/nuget" />
  </packageSources>
  <packageRestore>
    <!-- Allow NuGet to download missing packages -->
    <add key="enabled" value="True" />

    <!-- Automatically check for missing packages during build in Visual Studio -->
    <add key="automatic" value="True" />
  </packageRestore>
</configuration>
于 2014-07-09T09:31:29.083 に答える
2

更新: この回答は、1.13.0.0 より前のバージョンにのみ適用されるようになりました。

のファイルはSolutionDir\Tools\Fodynuget を介してデプロイできず、ソース管理にチェックインする必要があります

于 2013-01-15T00:47:09.190 に答える
1

NuGet パッケージでビルド更新を出荷しようとしたときと同じ問題が発生しています。問題は、ビルド プロセス中にNuGet パッケージの復元が呼び出されることです。このため、NuGet パッケージの復元がインポートされた .targets ファイルを復元すると、復元が遅すぎます。ファイルがディスクに書き込まれるまでに、ファイルが<Importディスク上にないため、要素はすでに評価され、スキップされています。

私が見つけた最善の方法は、パッケージの復元を呼び出す別のプロジェクトを構築することです。NuGet パッケージがインストールされているときに自分のSlowCheetah NuGetpackageRestore.projパッケージでこれをスムーズにするために、.csproj/.vbproj と同じディレクトリにファイルを作成します。その後、ユーザーはこのプロジェクト ファイルをビルドし、次に .sln/.csproj/.vbproj をビルドできます。これにより、NuGet パッケージが復元され、ビルド プロセスが開始されます。

私の使用に興味がある場合はpackageRestore.proj、SlowCheetah NuGet パッケージのその部分を独自のものにリファクタリングできます。NuGet パッケージはその部分に依存できます。ご興味がありましたらお知らせください。

于 2013-01-14T18:02:06.963 に答える