0

使用 SlowCheetah,我的类库中有一个 custom.config 文件,我希望这个文件被转换并包含在引用它的控制台应用程序的输出中。

Slow Cheetah 将 custom.config 转换到它自己的 bin 文件夹中,我可以使用 copy-always/newer 包含 custom.config,但它是复制的未转换的配置。转换后的配置文件被 slowcheetah 转换后,如何将转换后的配置文件复制到我的输出项目中?

请注意,我没有尝试将app.config转换为 classLibrary.dll.config 并将其包含在内。我已经可以做到了。我正在寻找的是在转换后转换和包含其他 custom.config 文件的选项。

4

1 回答 1

0

我将在这里发布我自己的解决方案,我最终放弃了 SlowCheetah 并直接在构建文件 (.csproj) 中的自定义转换步骤中执行它。

<Target Name="AfterBuild">
  <ItemGroup>
    <!-- Files to transform -->
    <ConfigurationFile Include="$(OutputPath)\Config\*.config" Exclude="$(OutputPath)\Config\*.*.config" />
    <!-- Files to use to transform -->
    <TransformationFile Include="$(OutputPath)\Config\*.*.config" />
  </ItemGroup>
  <!-- Message for debugging -->
  <Message Text="Transforming %(ConfigurationFile.Identity)  ==&gt;  @(ConfigurationFile->'$(OutputPath)\Config\%(Filename).$(Configuration)%(Extension)')" Importance="normal" Condition="Exists('@(ConfigurationFile->'$(OutputPath)\Config\%(Filename).$(Configuration)%(Extension)')')"
  />

  <!-- This is the actual transform step -->
  <TransformXml Source="%(ConfigurationFile.Identity)" Transform="@(ConfigurationFile->'$(OutputPath)\Config\%(Filename).$(Configuration)%(Extension)')" Destination="@(ConfigurationFile->'$(OutputPath)\Config\%(Filename)%(Extension)')" StackTrace="True"
  Condition="Exists('@(ConfigurationFile->'$(OutputPath)\Config\%(Filename).$(Configuration)%(Extension)')')" />



  <!-- ===Uncomment this to clean up transform files from target directory=== -->
  <!--<Message Text="Deleting:  %(TransformationFile.Identity)" />
	 <Delete Files="@(TransformationFile)" /> -->
</Target>

我所有的配置文件都存在于名为“Config”的目录中的引用项目中,被称为“somethingSpecific.config”,所有的转换文件都被称为“somethingSpecific.someEnvironment.config”。

此构建目标将搜索 config 文件夹中的所有文件,并尝试查找与构建配置对应的转换文件。对于它找到的任何匹配,它将执行转换。只需确保所有配置文件和所有转换文件都能找到输出路径中正确的文件夹。

于 2015-03-25T09:38:48.630 回答