我们有一个使用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>