在发布配置文件中包含未引用的项目

时间:2014-10-09 06:33:40

标签: visual-studio deployment msbuild

我们有一个使用MEF的可插拔架构,允许我们将dll放入bin中,然后由我们的应用程序加载它们。我们现在开始使用pubxml配置文件和不同配置实现自动化部署。我们遇到的问题是将未引用的程序集的输出复制到部署中。

在开发中,我们使用copy / xcopy根据配置将dll和文件夹放到正确的bin中,但是我们如何使用发布配置文件中的pubxml文件来执行此操作。我们应该只复制有问题的项目的输出目录,还是有办法使用msbuild命令告诉它还要构建一个项目并包含?

我们当前的pubxml看起来像这样,它会删除所有ckeditor文件,进行部署并在之后将它们复制回来,CONFIGNAME是构建配置的名称,这将在解决方案中构建其​​他项目,将输出复制到正确的bin文件夹,以便应用程序接收它们,正如我所说,这在visual studio中在调试时非常有用,但不适用于发布。

 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <PropertyGroup>
    <SourceDirectory>$(MSBuildThisFileDirectory)\..\..</SourceDirectory>
    <DestinationDirectory>$(MSBuildThisFileDirectory)\..\..\..\..\..\Deployments\CONFIGNAME</DestinationDirectory>
  </PropertyGroup>

  <Target Name="BeforeBuild">

    <Message Text="Delete all files - $(DestinationDirectory)" />

    <ItemGroup>
      <FilesToDelete Include="$(DestinationDirectory)\**\*"/>
    </ItemGroup>
    <Delete Files="@(FilesToDelete)" />
  </Target>

  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <LastUsedBuildConfiguration>CONFIGNAME</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <publishUrl>$(DestinationDirectory)</publishUrl>
    <DeleteExistingFiles>True</DeleteExistingFiles>
  </PropertyGroup>

  <Target Name="AfterBuild" AfterTargets="MSDeployPublish">
    <CreateItem Include="$(SourceDirectory)\ckeditor\**\*.*">
      <Output TaskParameter="Include" ItemName="CkEditorFiles" />
    </CreateItem>

    <Message Text="Destination directory Name - $(DestinationDirectory)" />
    <Message Text="Source directory Name - $(SourceDirectory)" />

    <Copy SourceFiles="@(CkEditorFiles)"
        DestinationFiles="@(CkEditorFiles->'$(DestinationDirectory)\ckeditor\%(RecursiveDir)%(Filename)%(Extension)')" />
  </Target>

</Project>

0 个答案:

没有答案