我正在尝试为不同的环境转换crossdomain.xml,就像常规的web.config文件一样。我已经尝试过为Visual Studio使用SlowCheetah加载项,但它在Web应用程序中效果不佳。它不断发布转换文件以及转换后的文件,这是我不想要的。而且,它也用于web.config转换。
我的另一个想法是重命名文件并将所有转换为crossdomain。$(Configuration).config希望VS能够将其获取并转换它,然后在构建过程中将其重命名为crossdomain.xml。但VS根本不会改变它。这就是我目前的变形形式。
crossdomain.config
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain- policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" secure="false" />
</cross-domain-policy>
crossdomain.stage.config
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<allow-access-from domain="*.foo.com" secure="true" xdt:Transform="Replace" />
</cross-domain-policy>
有人有任何建议吗?
更新 我越花时间在这上面,我就越发现.NET中的部署是一个彻头彻尾的噩梦。仍在努力解决这个问题。看起来VS发布功能可以进行某种半成品部署。它调用MSBuild来收集要部署的文件,然后在MSBuild之外手动部署它。因此,无法获得部署路径来进行转换。我必须将它作为参数存入MSBuild。
答案 0 :(得分:0)
讨厌回答我自己的问题,但以下链接有助于理顺这一点:
https://stackoverflow.com/a/5381408/546709
<Target Name="TransformOtherConfigs" AfterTargets="CollectWebConfigsToTransform">
<ItemGroup>
<WebConfigsToTransform Include="@(FilesForPackagingFromProject)"
Condition="'%(FilesForPackagingFromProject.Extension)'=='.config'"
Exclude="*.$(Configuration).config;$(ProjectConfigFileName)">
<TransformFile>%(RelativeDir)%(Filename).$(Configuration).config</TransformFile>
<TransformOriginalFile>$(TransformWebConfigIntermediateLocation)\original\%(DestinationRelativePath)</TransformOriginalFile>
<TransformOutputFile>$(TransformWebConfigIntermediateLocation)\transformed\%(DestinationRelativePath)</TransformOutputFile>
<TransformScope>$([System.IO.Path]::GetFullPath($(_PackageTempDir)\%(DestinationRelativePath)))</TransformScope>
</WebConfigsToTransform>
<WebConfigsToTransformOuputs Include="@(WebConfigsToTransform->'% (TransformOutputFile)')" />
</ItemGroup>
</Target>