任意命名的配置文件的CodeAssassin.ConfigTransform

时间:2012-10-02 02:51:50

标签: web-config app-config web-config-transform

在VS版本中NuGet包CodeAssassin.ConfigTransform转换web.*.configapp.*.configweb.*.config.transformedapp.*.config.transformed

但是,如果您有{arbitrary-name}.config格式的配置文件,该怎么办?

例如,MyAssembly.dll.config及其转换规则集MyAssembly.dll.debug.config& MyAssembly.dll.release.config

CodeAssassin.ConfigTransform似乎不适用于这些文件模式。

2 个答案:

答案 0 :(得分:0)

如果查看target source code,修改它看起来很简单,以允许转换任何.config文件。实际上我认为应该可以转换任何XML文件。

我明天将把该存储库分叉并进行实验。

答案 1 :(得分:0)

免责声明:在此示例中,我直接修改了CodeAssassin.ConfigTransform.targets。但是你应该在你的.csproj中创建一个单独的.targets文件并引用它。

添加ConnectionString.config(作为示例),然后添加转换。 Transform files

将此添加到.targets文件中(您的配置名称必须与正则表达式匹配 - 在这种情况下为(?i)^ConnectionString\.):

<Target Name="TransformAllConnectionStringConfigTransformFiles"
        Condition="'$(WebProjectOutputDir)'!=''"
        BeforeTargets="Compile">

  <ItemGroup>
    <ConnectionStringConfigTransformFile Include="@(None);@(Content)" Condition="'$([System.Text.RegularExpressions.Regex]::IsMatch(%(Filename),&quot;(?i)^ConnectionString\.&quot;))' == true and '%(Extension)'=='.config'" />
  </ItemGroup>

  <TransformXml Source="ConnectionString.config" Destination="%(ConnectionStringConfigTransformFile.Identity).transformed" Transform="@(ConnectionStringConfigTransformFile)"
                Condition="'@(ConnectionStringConfigTransformFile)'!=''" />

  <CreateItem Include="%(ConnectionStringConfigTransformFile.Identity).transformed"
              AdditionalMetadata="CopyToOutputDirectory=Always">
    <Output TaskParameter="Include" ItemName="Content"/>
  </CreateItem>

</Target>

构建,并创建.transformed文件。

.transformed files