3

すべてのプロジェクトでワンクリック公開機能を使用するのと同じように、ソリューションで複数のWebアプリケーションを公開できるVisualStudio拡張機能を作成しようとしています。

DTE2 service = (DTE2)this.GetService(typeof(DTE));
Projects projects = service.Solution.Projects;
SolutionBuild2 build = (SolutionBuild2)service.Solution.SolutionBuild;

foreach (Project project in projects)
{
   build.PublishProject("Release", project.UniqueName, true);
}

このコードを実行しようとすると、出力ウィンドウに表示される結果は次のとおりです。

Error: Object reference not set to an instance of an object.
========== Publish: 0 succeeded, 0 failed, 0 skipped ==========

...それは私に多くを教えてくれません。何が問題になっているのかを知る方法はありますか?

インターフェースIVsPublishableProjectCfgもありますが、その使用方法の例はないようです。

ワンクリック公開機能の動作と同様に、プログラムでWebアプリケーションを特定のディレクトリに公開する別の方法はありますか?

4

3 に答える 3

0

これを行う別の方法は、次の同様の質問のように、ソリューション エクスプローラーで右クリックの [発行] コンテキスト メニュー項目のクリックをシミュレートすることです: DTE.ExecuteCommand と待機

これは非同期コマンドであるため、発行後のイベントを利用してプロジェクトのコレクションを反復処理するロジックを組み込む必要があることに注意してください (これに関する詳細は、含まれている回答の 1 つに示されています)。

于 2011-09-16T04:22:56.477 に答える
0

msbuild.exe 実行可能ファイルを使用し (これはとにかくビルドする方法です)、プロジェクトの引数として sln ファイルを渡し、"Publish" ターゲットをターゲットにします。

msbuild SlnFolders.sln /t:Publish

コマンド ラインでいくつかのプロパティを宣言するか、独自の .targets ファイルを使用して静的に宣言することができます。.csproj でこの .targets ファイルを参照してください。

<Import Project="MyPublishCustomizations.targets" />

.targets ファイルの内容は次のようになります。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="Publish">
    </Target>
    <!-- or .. -->
    <Target Name="CustomPublish" BeforeTargets="Publish">
    </Target>
</Project>

.. <Target ..>XML はその中に含まれる可能性があります ..

<PropertyGroup>
    <MyCustomPath>\\our_server\our_share</MyCustomPath>
</PropertyGroup>
<Copy SourceFiles="$(OutDir)\*" DestinationFiles="$(MyCustomPath)" />

その後、他の MSBuild タスクを定義できます<Exec ..>。.

MSBuild の一般的な説明: https://msdn.microsoft.com/en-us/library/dd393573.aspx

また、パブリッシュ ロジックを C# で書くことにこだわる場合は、上記のパスを検討して、カスタムMSBuild タスクを定義することもできます。

<ExecuteMyCustomTaskDefinedInCSharp ParameterA="Hello" ParameterB="World" />

ここで方法を学びます。

于 2015-04-23T17:49:12.127 に答える