7

Visual Studio 2012 UI を使用して、サード パーティの非参照アセンブリを Webdeploy 経由でデプロイするのに苦労しています。いくつかのアセンブリを含む「ライブラリ」というフォルダーがあります。*.csproj ファイルで次のようにすると、ビルド アクションを「ThirdPartyAssemblies」に設定できます。

<ItemGroup>
  <AvailableItemName Include="ThirdPartyAssemblies">
    <Visible>false</Visible>
  </AvailableItemName>
</ItemGroup>
<Target Name="AfterBuild">
  <Message Text="Build | Third party assemblies" Importance="high" />
  <Copy DestinationFolder="$(OutputPath)" SourceFiles="@(ThirdPartyAssemblies)" SkipUnchangedFiles="true" />
</Target>

これはうまくいきます。ビルドすると、アセンブリが bin フォルダーのルートにコピーされます :-) 問題が 1 つあります。これらのファイルを Webdeploy 経由でサーバーに公開できません。私は多くのことを試しましたが、このタスクに適した MSBuild ターゲットが見つからないようです... Visual Studio 2010 では、これを使用できます。

<Target Name="MyTargetName">
  <Message Text="Deploy | Third party assemblies" Importance="high" />
  <Copy DestinationFolder="$(OutputPath)" SourceFiles="@(ThirdPartyAssemblies)" SkipUnchangedFiles="true" />
</Target>
<PropertyGroup>
  <OnAfterCopyAllFilesToSingleFolderForPackage>
    MyTargetName
  </OnAfterCopyAllFilesToSingleFolderForPackage>
</PropertyGroup>

問題は; OnAfterCopyAllFilesToSingleFolderForPackageターゲットはもう呼び出されません:- /

を掘り下げた後C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.targets' file, I've also tried 'OnAfterCopyAllFilesToSingleFolderForMsdeploy、しかし、私はそれを動作させることができません。

これらのアセンブリを Webdeploy を使用してパッケージ フォルダー/サーバーにコピーするために使用できるターゲットを誰か教えてもらえますか?

Visual Studio 2012 が完全な bin フォルダーを Package フォルダーにコピーしないのはなぜですか?

4

2 に答える 2

8

Alexey のおかげで、問題の解決策が見つかりました。これは、Filesystem および Webdeploy のサード パーティ アセンブリのコピーをサポートするために、.csproj ファイルで現在使用しているものです。

<ItemGroup>
    <AvailableItemName Include="ThirdPartyAssemblies">
        <Visible>false</Visible>
    </AvailableItemName>
</ItemGroup>
<Target Name="AfterBuild">
    <Message Text="Build | Copying third party assemblies to output folder ($(OutputPath))" Importance="high" />
    <Copy DestinationFolder="$(OutputPath)" SourceFiles="@(ThirdPartyAssemblies)" SkipUnchangedFiles="true" />
</Target>
<Target Name="CopyBinFiles" AfterTargets="CopyAllFilesToSingleFolderForPackage" BeforeTargets="MSDeployPublish">
    <Message Text="Deploy | Copying third party assemblies to output folder ($(_PackageTempDir)\bin\)" Importance="high" />
    <Copy DestinationFolder="$(_PackageTempDir)\bin\" SourceFiles="@(ThirdPartyAssemblies)" SkipUnchangedFiles="true" />
</Target>
于 2012-09-25T09:04:43.320 に答える
2

あなたはvs2012を使用しています。これは、光沢のある新しいmsbuild 4.0 =)を持っていることを意味します。新しいAfterTargets属性を使用してターゲット呼び出しをフックする方がはるかに簡単です。使用例については、この質問に対する私の回答を確認できます。

于 2012-09-25T03:48:57.347 に答える