1

私は、呼び出されたときに C# プロジェクトをビルドする Web サービスを作成しています。私はフレームワーク 2 リファレンス、Microsoft.Buld.Engine および Microsoft.Build.Framework を使用しています。'<Import>' セクションの .csproj ファイルを見ると、既定では次のようになっています。

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

その後、次のように変更しました。

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

csproj をビルドするための私のコードは次のとおりです。

Engine buildEngine = new Engine(Path.Combine(Environment.GetEnvironmentVariable("SystemRoot"), @"Microsoft.NET\Framework\v2.0.50727"));
FileLogger logger = new FileLogger();
logger.Parameters = @"logfile=c:\temp\build.log";
buildEngine.RegisterLogger(logger);

bool success = buildEngine.BuildProjectFile([Path_Of_Directory]+ "ProjectName.csproj");
buildEngine.UnregisterAllLoggers();

ビルドが失敗したため、success 変数は false を返します。次に、build.log ファイルを確認すると、次のエラーが表示されます。

ビルド開始 2010 年 3 月 17 日 11:16:56 AM プロジェクト "[Path_Of_Directory]\ProjectName.csproj" (既定のターゲット): ターゲット GetFrameworkPaths: .NET Framework SDK が見つかりませんでした。タスクは、レジストリ キー HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework の SDKInstallRootv2.0 値で指定された場所にある .NET Framework SDK へのパスを探します。次のいずれかを実行すると、問題を解決できる場合があります。 1.) .NET Framework SDK をインストールします。2.) 上記のレジストリ キーを正しい場所に手動で設定します。目標

なぜビルドしないのか理解できません。どんな助けでも大歓迎です。ありがとう

4

4 に答える 4

4

/ToolsVersion:3.5 を使用

http://blogs.msdn.com/b/msbuild/archive/2006/11/15/multi-targeting-how-does-it-work.aspxに従って

ToolsVersion は、特定のツールセットを使用してプロジェクトを強制的にビルドするために使用するパラメーターです。

于 2010-11-29T06:40:08.383 に答える
1

あなたはこのように試すことができます:

C:\ Program Files \ Reference Assemblies \ Microsoft \ Framework \ v3.5\Microsoft.Build.Engine.dllからアセンブリを見つけます。以下に説明するように、GACの場所にコピーして貼り付けます。

C:\ Windows \ assembly \ GAC_MSIL \ Microsoft.Build.Engine \ 3.5.0.0__b03f5f7f11d50a3a

それは働いています。GACファイルが見つからないために問題が発生しました。

于 2011-12-26T10:24:40.273 に答える
1

さらに調査したところ、エラーの本当の理由がわかりました。私が作成しているアプリケーションを要約すると、次のようになります。

これは、フレームワーク 2 を使用して開発された C# プロジェクトをビルドしようとする、フレームワーク 3.5 で作成された Web サービスです。

Microsoft.Buld.Engine と Microsoft.Build.Framework の 2 つの参照を追加すると、それぞれに 2 つのバージョンがあることがわかります。1 つのバージョンはフレームワーク 2 バージョンで、もう 1 つはフレームワーク 3.5 バージョンです。ビルドしようとしていたプロジェクトはフレームワーク 2 で行われたため、フレームワーク 2 バージョンをインポートしました。ここにエラーがあります。

解決策: BinPath は、フレームワーク 2 への唯一の参照である必要があります。つまり、「C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727」です。Microsoft.Buld.Engine と Microsoft.Build.Framework は、ビルドを行うアプリケーションがフレームワーク 3.5 で開発されているため、3.5 バージョンを指す必要があります。フレームワーク 2 で開発されていれば、そもそも問題は発生しなかったと思います。

于 2010-03-18T12:55:37.087 に答える
1

このプロジェクトをビルドすることで、SDK パスを確認することができます。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="GetPath">
        <GetFrameworkSdkPath>
            <Output
                TaskParameter="Path"
                PropertyName="SdkPath" />
        </GetFrameworkSdkPath>
        <Message Text="$(SdkPath)"/>
    </Target>
</Project>

私は間違っているかもしれませんが、表示されているパスC:\WINDOWS\Microsoft.NET\Framework\v2.0.50727は正しくないようです。

C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\ または C:\Program Files\Microsoft SDKs\Windows\v6.0A にする必要があります。

于 2010-03-17T10:19:48.160 に答える