7

我很难使用 Visual Studio 2012 UI 通过 Webdeploy 部署我的第三方非参考程序集。我有一个名为“库”的文件夹,其中包含一些程序集。通过我的 *.csproj 文件中的以下内容,我可以将Build Action设置为“ 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 文件夹的根目录:-) 现在我遇到了一个问题:我无法通过 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 的 Package 文件夹/服务器?

为什么 Visual Studio 2012 不将完整的 bin 文件夹复制到 Package 文件夹中?

4

2 回答 2

8

感谢 Alexey,我找到了解决问题的方法,这就是我现在在我的 .csproj 文件中使用的内容,以支持为 Filesystem- 和 Webdeploy 复制第三方程序集:

<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 回答