0

これが背景です。2 つのプロジェクト (service.csproj と client.csproj) を含むソリューション ファイル (a.sln) があります。3 つのプロジェクト (service.csproj、client.csproj、test.csproj) を含む別の古いソリューション ファイル (b.sln) があります。このソリューション ファイルとテスト プロジェクトも使用しません。

コンパイルには NANT スクリプトを使用します。NANT 内では、「devenv.com」を呼び出す を使用し<exec> taskてソリューション ファイルをコンパイルします。ビルド スクリプトにいくつかの変更を加えようとしていた (ビルド中にその場でサービスのプロキシを生成する) ため、service.csproj ファイルだけをコンパイルしようとしました。以下に示すように、NANT スクリプトを更新しました。

<exec program="${visualstudio.install.dir}\devenv.com" commandline="&quot;${base.dir}\Service.csproj&quot; /rebuild ${config}" failonerror="true" />

しかし、上記の行が実行されると、コンパイルされます(次の順序で)

を。client.csproj b. c.service.csproj test.csproj

service.csproj には、クライアント プロジェクトとテスト プロジェクトへのプロジェクト参照がありません。

正確に何が起こっているのか、クライアント/テストプロジェクトがどのようにコンパイルされているのかを知るために頭を悩ませました。

これは私が見つけたものです。次のフォルダー構造があります。

MyFolder -> 

    -> Service
        service.csproj
        b.sln
    -> Client
        client.csproj
    -> Test
        test.csproj
    a.sln

b.sln は廃止され、使用されていないため、MyFolder -> Service フォルダー (service.csproj ファイルと同じフォルダー) にありました。(私の新しい会社の開発者はこれに非常に不満を持っているため、未使用のファイルを削除せず、名前を _old に変更し続けています。)

devnenv.com は、どうにかして b.sln ファイルからプロジェクト ファイルを取得し、コンパイルしていました。私は b.sln ファイルを削除し、スクリプトは問題なく service.csproj をコンパイルします。ソリューション ファイル。

何が起こっているのか誰にも分かりますか?

4

1 に答える 1

1

これは、これについてマイクロソフトから得た回答です。

プロジェクト ファイルを直接開くと、Visual Studio はいくつかのヒューリスティックを適用して、親ソリューション ファイルを見つけようとします。Visual Studio が、プロジェクトのディレクトリまたは親ディレクトリに、一致するプロジェクト名を持つソリューション ファイルを見つけた場合、Visual Studio はそのソリューションを使用します。devenv /build は UI からビルドの動作を直接再現しようとするため、これらのヒューリスティックはすべて適用されます。廃止された b.sln には service.csproj が含まれているため、ヒューリスティックによって検出され、状況によってはソリューション内の他のプロジェクトもビルドされる可能性があります。

この問題は 2 つの方法で回避できます。プロジェクトのフォルダー ツリーから機能していないソリューションを削除するか、MSBuild を直接実行して services.csproj をビルドします。.*proj ファイルを渡した場合、MSBuild はソリューション ヒューリスティックを適用しません。

于 2013-09-16T21:42:43.153 に答える