SlowCheetah在构建时未转换文件

32
我有一个项目,我正在尝试使用SlowCheetah。 我已经创建了配置文件(Test.web.config)和我想要使用的所有转换(Debug_Mock.config、Debug_SQL.config、Release) 在我的Build配置中,我有一个后置构建事件,应该将转换后的文件复制到另一个目录,但找不到该文件(错误xcopy退出代码为4)。
像我所期望的那样,SlowCheetah似乎没有转换文件并将其放置在输出目录(bin文件夹)中。 是否有人有任何想法,为什么它没有发生,也许是某个设置?
FYI:这个过程在另一台机器上可以工作,与相同的项目。就我所知,也是相同的设置。但我可能没有在正确的地方查看。

2
以下任何解决方案都不适用于我:(最终你解决了吗? - Ruslan
1
以下解决方案对我也没有用。即使在预览中,更改也没有出现。 - NLV
8个回答

33

对我来说,问题在于配置文件中的 slow cheetah 属性组在检查是否存在的部分下面。

因此,修复方法就是将属性组移动到该行上方的某个位置,以便允许变换按预期运行。

将它放在这里:

<PropertyGroup Label="SlowCheetah">
  <SlowCheetahToolsPath>$([System.IO.Path]::GetFullPath( $(MSBuildProjectDirectory)\..\packages\SlowCheetah.2.5.10.3\tools\))</SlowCheetahToolsPath>
  <SlowCheetah_EnableImportFromNuGet Condition=" '$(SC_EnableImportFromNuGet)'=='' ">true</SlowCheetah_EnableImportFromNuGet>
  <SlowCheetah_NuGetImportPath Condition=" '$(SlowCheetah_NuGetImportPath)'=='' ">$([System.IO.Path]::GetFullPath( $(MSBuildProjectDirectory)\Properties\SlowCheetah\SlowCheetah.Transforms.targets ))</SlowCheetah_NuGetImportPath>
  <SlowCheetahTargets Condition=" '$(SlowCheetah_EnableImportFromNuGet)'=='true' and Exists('$(SlowCheetah_NuGetImportPath)') ">$(SlowCheetah_NuGetImportPath)</SlowCheetahTargets>
</PropertyGroup>

在此之上:

<Import Project="$(SlowCheetahTargets)" Condition="Exists('$(SlowCheetahTargets)')" Label="SlowCheetah" />

这对我解决了问题;我使用的是通过NuGet安装的SlowCheetah 2.5.10.3,但我的App.config文件没有被转换。我交换了上面两个元素的顺序,然后它开始工作了。 - Nick Jones
在本地进行了上述修复后,我们的 Jenkins 构建服务器开始出现构建失败的问题,正如其他人在此处所指出的:https://github.com/sayedihashimi/slow-cheetah/issues/114。解决方法是将 SlowCheetah.transforms.targets 中的 SlowCheetah 版本调整为正确的 2.5.10.3 版本。 - Nick Jones
这对我有用。我正在使用SlowCheetah 2.5.14。 - Jason Boyd
这对我解决了问题。我的项目的vbproj文件中既没有添加PropertyGroup也没有添加Import。此外,我还更新了SlowCheetahToolsPath元素中的版本号。 - gillonba
什么配置文件中的属性组? - Toolkit
2
@Toolkit 是您添加 SlowCheetah 的 csproj/project 文件。 - laurencee

16

检查您的项目,是否存在名为 SlowCheetah 的文件夹,其中包含文件 SlowCheetah.Transforms.targets。 如果找不到此文件,请尝试以下步骤:

  1. 右键单击解决方案
  2. "管理解决方案的 NuGet 包...",浏览 SlowCheetah
  3. 点击 "管理"
  4. 取消选中您的项目,然后点击 "确定"
  5. 再次点击 "管理"
  6. 选择您的项目,再次点击 "确定"

这将重新创建缺失的文件。


这对我就是这样了。我从http://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5安装,但没有创建文件夹。所以我得到了Add / Preview,但转换实际上并没有发生。 - user44484
1
老套的卸载/重新安装解决方案。每次都有效! - Tommy
4
在“属性”文件夹下创建了“SlowCheetah”文件夹。 - YuMei
这对我有效,事实证明我们只安装了VS插件,忘记安装NuGet包。感谢Thorsten。 - ChengWhyNot

11
  • 启用构建详细信息 (工具 -> 选项 -> 项目和解决方案 -> 构建和运行),并查看正常工作的版本与不正常工作的版本之间的区别。

  • 据我所知,Slow-Cheetah 支持 app.config 文件的配置转换,但目前不支持在调试中使用 web.configs。它应该会将已转换的 web.config 文件放在您的项目的 bin 文件夹中,但您的项目仍然从根文件夹中的 config 文件中读取。请参考预/后构建事件: http://sedodream.com/CommentView,guid,68b7e248-b9f5-4d07-bdfe-eb037bcf2cbb.aspx

  • 您可以在以下网址请求对调试的 web config 转换进行支持: https://github.com/sayedihashimi/slow-cheetah/issues/39

  • 尝试重新安装 Slow-Cheetah。


2
这个问题被标记为已解决,但是哪一步修复了这个问题? - Travis Parks
5
对我来说,我已经从http://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5安装了SlowCheetah,这使我可以进行添加转换和预览转换,但不会更改输出配置。然后我从nuget安装了SlowCheetah,它可以正常工作。 - user44484
2
@ChrisCameron 刚刚从网站上安装了 VS2013 Up5 上的 SlowCheetah。预览可以工作,但在构建时无法进行转换。从 Nuget 安装可以解决这个问题。谢谢! - Esselans
1
谢谢。浪费了很多时间。最终,卸载扩展并从NuGet安装解决了它! - Gautam Jain
看一下下面的 csproj/vsproj 答案,这个答案没有解决我的问题,但是添加 propertygroup 后问题得到了解决。 - Nathan Tregillus

7
请注意,为了使转换工作正常,您需要安装SlowCheetah Visual Studio扩展 SlowCheetah nuget包到相关项目中。

扩展和包的区别非常重要。我需要它们两个来进行转换。 - BeHappy

6
在按照以上所述重新安装后,我需要将subTypetransformOnBuild节点添加到我的csproj文件中,然后它开始为我工作。
<None Include="App.config">
  <SubType>Designer</SubType>
  <TransformOnBuild>true</TransformOnBuild>
</None> 
<None Include="App.QA.config">
  <DependentUpon>App.config</DependentUpon>
  <IsTransformFile>True</IsTransformFile>
</None>

3

使用 SlowCheetah 2.5.15 和 Visual Studio 2015 的时候,我需要卸载 NuGet 包并手动从相关的 .csproj 文件中删除以下内容:

<Import Project="$(SlowCheetahTargets)" Condition="Exists('$(SlowCheetahTargets)')" Label="SlowCheetah" />

并且

<PropertyGroup Label="SlowCheetah">
  <SlowCheetahToolsPath>$([System.IO.Path]::GetFullPath( $(MSBuildProjectDirectory)\..\packages\SlowCheetah.2.5.15\tools\))</SlowCheetahToolsPath>
  <SlowCheetah_EnableImportFromNuGet Condition=" '$(SlowCheetah_EnableImportFromNuGet)'=='' ">true</SlowCheetah_EnableImportFromNuGet>
  <SlowCheetah_NuGetImportPath Condition=" '$(SlowCheetah_NuGetImportPath)'=='' ">$([System.IO.Path]::GetFullPath( $(MSBuildProjectDirectory)\Properties\SlowCheetah\SlowCheetah.Transforms.targets ))</SlowCheetah_NuGetImportPath>
  <SlowCheetahTargets Condition=" '$(SlowCheetah_EnableImportFromNuGet)'=='true' and Exists('$(SlowCheetah_NuGetImportPath)') ">$(SlowCheetah_NuGetImportPath)</SlowCheetahTargets>
</PropertyGroup>

一旦完成了这个步骤并重新安装SlowCheetah NuGet包,我的问题就得到了解决。


3
SlowCheetah 3.2.20添加了一个“功能”,旨在尊重Visual Studio中的“不复制”文件设置。因此,如果您的.config文件没有设置为“始终复制”或“仅在更新时复制”,则它们不会被复制到输出文件夹中。
有关详细信息,请参见https://github.com/Microsoft/slow-cheetah/issues/182
这是我的问题-我花了三个小时来调试它...

0
对我来说,App.config 转换是有效的。只是输出不是 App.config,而是实际上是 appname.exe.config。事实上,我关闭了将 app.config 复制到应用程序生成输出文件夹的操作,以免混淆其他人。appname.exe 可执行文件从 appname.exe.config 中获取配置信息。

您的回答可以通过添加更多支持信息来改进。请 [编辑] 添加进一步的细节,例如引用或文档,以便他人可以确认您的答案是正确的。您可以在 帮助中心 找到有关如何编写良好答案的更多信息。 - Luciana Oliveira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接