是否有任何工具或Visual Studio 2010扩展允许我查看配置文件转换的输出,而不必发布整个项目?执行转换的过程是否可以直接调用?
编辑
经过一番谷歌搜索,我发现了这个:
步骤4:从命令行为"Staging"环境生成新的转换后的web.config文件
通过转到开始 - >程序文件 - > Visual Studio v10.0 - > Visual Studio工具 - > Visual Studio 10.0命令提示符打开Visual Studio命令提示符
键入"MSBuild"应用程序项目文件的路径(.csproj/.vbproj)"/ t:TransformWebConfig/p:Configuration = Staging"并按Enter键,如下所示:
转换成功后,"Staging"配置的web.config将存储在项目根目录下的obj - > Staging文件夹下(在解决方案资源管理器中,您可以通过首先取消隐藏隐藏文件来访问此文件夹):
- 在解决方案资源管理器中,单击按钮以显示隐藏文件
- 打开Obj文件夹
- 导航到您的活动配置(在我们当前的情况下,它是"暂存")
- 你可以在那里找到转换后的web.config
您现在可以验证生成的新staging web.config文件是否具有已更改的连接字符串部分.
这对我来说并不是一个完美的解决方案,因为它仍然需要构建整个项目 - 至少使用他发布的命令.如果有人知道如何跳过使用MSBuild命令的构建步骤会有所帮助(尽管听起来有点不太可能).
编辑2
我还在CodePlex上找到了这个配置转换工具,它提供了一些很好的功能来扩展转换过程.这个工具是我所见过的最接近我正在寻找的功能的工具,并且是开发创建预览的扩展的一个很好的起点.它使用Microsoft.Web.Publishing.Tasks库来执行转换,而不依赖于构建实际项目.
web-config configuration-files visual-studio-2010 slowcheetah
从我的.csproj文件:
<Content Include="log4net.config">
<SubType>Designer</SubType>
</Content>
<Content Include="log4net.Release.config">
<DependentUpon>log4net.config</DependentUpon>
</Content>
<Content Include="log4net.Debug.config">
<DependentUpon>log4net.config</DependentUpon>
</Content>
<Content Include="log4net.Live.config">
<DependentUpon>log4net.config</DependentUpon>
</Content>
<Content Include="log4net.Demo.config">
<DependentUpon>log4net.config</DependentUpon>
</Content>
Run Code Online (Sandbox Code Playgroud)
在我的.csproj文件的底部:
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
<Target Name="AfterCompile" Condition="exists('log4net.$(Configuration).config')">
<TransformXml Source="log4net.config"
Destination="$(IntermediateOutputPath)$(TargetFileName).config"
Transform="log4net.$(Configuration).config" />
<ItemGroup>
<AppConfigWithTargetPath Remove="log4net.config"/>
<AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config">
<TargetPath>$(TargetFileName).config</TargetPath>
</AppConfigWithTargetPath>
</ItemGroup>
</Target>
Run Code Online (Sandbox Code Playgroud)
来自log4net.config
<connectionString name="ConnName"
value="Data Source=localhost\sqlexpress;Initial Catalog=localdb;Persist Security Info=True;Integrated Security=SSPI;" />
Run Code Online (Sandbox Code Playgroud)
从log4net.Live.config(删除敏感数据)
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionString name="ConnName" value="Data Source=127.0.0.1;Initial Catalog=DBName;Persist Security Info=True;User ID=userid;Password=pword"
providerName="System.Data.SqlClient" xdt:Transform="Replace" xdt:Locator="Match(name)" />
</configuration>
Run Code Online (Sandbox Code Playgroud)
我检查了msbuild输出,我看到它正确地转换了我的web.config,但我看到没有输出它转换log4net.此外,当我在发布后检查log4net.config文件时,它具有原始连接字符串.
我究竟做错了什么 :)?
谢谢!
更新 …
asp.net msbuild configuration visual-studio-2010 slowcheetah
我的持续集成服务器(TeamCity)配置为在构建中运行我们的应用程序中的所有单元测试.在运行这些测试之前,我需要更改一些appSettings以使它们对我们的CI服务器有效.通过使用随Visual Studio提供的部署项目,我正在为我的Web项目实现类似的功能.我可以为测试项目做同样的事吗?
谢谢,贡萨洛
我有一个包含重写规则的web.config,如下所示:
<system.webServer>
<rewrite>
<rules><!-- Some rules here --></rules>
</rewrite>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
对于特定的部署配置,我想<rewrite>完全删除该节点.
我试过这样做:
<system.web>
<rewrite xdt:Transform="RemoveAll" />
</system.web>
Run Code Online (Sandbox Code Playgroud)
基于此文档:
http://msdn.microsoft.com/en-us/library/dd465326.aspx
但<rewrite>节点仍然存在.
我错过了什么?
我需要能够使用msbuild转换我的app.config文件.我可以转换文件,如果它被称为app.DEBUG.config或app.Release.config,但我不能添加一个名为app.PROD.config的文件.
使用常规XDT转换如果我选择不同的PublishProfile,msbuild会识别不同的web.config文件
msbuild path.to.project.csproj Configuration=Release PublishProfile=DEV
Run Code Online (Sandbox Code Playgroud)
显然app.config不能使用相同的设置.我总是可以为DEV.config设置创建一个特定的构建配置,但对一个应用程序进行单独的构建确认似乎没用.一个hacky方法是只为每个环境POST-BUILD复制正确的app.config.
我试图使用SlowCheetah插件,但这似乎只是转换默认的DEBUG和RELEASE配置文件,这是不合适的,因为我有两个以上的环境.如果我确实使用了这个错误,请让我知道我应该将哪个参数传递给msbuild来选择我的app.DEV.config.
预期的结果是msbuild将根据自定义的变换app.DEV.config或为app.PROD.config自定义的变换来变换app.config.我希望有一个参数可以传递给msbuild,这将允许我使用Release配置,但每个环境使用不同名称的转换.
我已经在我的web.config中为我的connectionStrings等设置了一些配置转换.但是我已将web.config的某些区域分离为单独的文件,例如appSettings.config.
如何配置Visual Studio和MSBuild以对这些附加配置文件执行配置转换?
我已经按照web.config的方法在我的Web应用程序项目文件中将文件关联在一起,但不会自动应用转换.
<ItemGroup>
<Content Include="appSettings.Debug.config">
<DependentUpon>appSettings.config</DependentUpon>
</Content>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud) 我不想在所有构建服务器上安装Slow Cheetah.
我们正在使用Slow Cheetah进行配置转换,它工作得很好.它会生成多个app.config文件,我们会根据需要对它们进行更改.
我们设置了几台服务器.所有这些都有他们的代码库,他们从命令行中提取代码并相应地构建包.这些代码中包含那些配置文件.但是当我们从命令行编译应用程序时,如果没有安装慢速猎豹,则不会使用转换生成包.否则它工作正常.
我们永远都不知道我们何时设置新服务器和新用户,因此无法在每个服务器上安装慢速猎豹
有可能以某种方式在应用程序中使用慢速猎豹dll并从中手动调用转换方法?
谢谢
msbuild build-automation build-process config-transformation slowcheetah
所以我想要完成的是转换构建中的所有配置文件.
在项目文件中,它们看起来像这样:
<None Include="FooBar.config.xml">
<TransformOnBuild>true</TransformOnBuild>
</None>
<None Include="FooBar.config.Release.xml">
<DependentUpon>FooBar.config.xml</DependentUpon>
<IsTransformFile>True</IsTransformFile>
</None>
Run Code Online (Sandbox Code Playgroud)
一切都适用于Windows服务和Windows应用程序.但对于网络项目来说,慢速猎豹并没有进行变革.经过一些研究后,我发现:"对于Web项目,当您发布或打包应用程序时,文件会被转换." 从慢速猎豹扩展页面.事实上,当我发布Web项目时,转换正确完成.
那么如何更改慢速猎豹默认行为并在构建服务器上执行所有变换?
环境:
寻找任何与SlowCheetah合作的人在Web项目下转换配置文件的帮助.我们发现从web.config引用的部分配置文件没有被转换.
例如,我们在web.config中包含对部分配置AppSettings.config和ConnectionsString.config的引用,如下所示:
</system.web>
<connectionStrings configSource ="ConnectionsString.config"></connectionStrings>
<appSettings configSource ="AppSettings.config"></appSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud)
然后在AppSettings.config中我们只有AppSettings部分,如下所示:
<appSettings>
<add key="LostPasswordBCC" value="knock@timmons.com" />
</appSettings>
Run Code Online (Sandbox Code Playgroud)
最后在转换文件AppSettings.Debug.config中我们有一些补充:
<?xml version="1.0" encoding="utf-8" ?>
<!-- For more information on using transformations
see the web.config examples at http://go.microsoft.com/fwlink/?LinkId=214134. -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<appSettings >
<add key="Release" value="Something" xdt:Transform="Insert" />
</appSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud)
显然上面只是一个测试,看看转换发生了,但我们发现的是,在尝试预览转换时,我们得到的所有内容都是错误"处理转换时出错".发布尝试也失败了.
如果我们使配置文件完全形成xml而不是从web.config引用,那么转换似乎工作正常 - 但是希望在多个项目之间共享这些文件.
有没有人知道是否有一个解决方法,我们既可以从web.config引用部分配置,也可以转换那些部分文件?我们正在处理遗留代码,其中包含大量尝试合并的Web项目中的配置文件,因此需要从Web配置链接到单独的共享文件.
场景:
我有一个带有自定义.config文件的类库项目.这些配置文件的构建操作设置为"内容"和"始终复制".然后,在同一解决方案中的至少4-5个控制台应用程序中引用此库项目.构建解决方案时,类库的程序集和自定义配置文件将复制到引用的项目bin文件夹中.
我想做什么:
使用SlowCheetah转换自定义配置文件
问题:
虽然SlowCheetah转换了类库项目中的配置文件,但它不会将转换后的文件复制到引用的项目中.即它始终复制源/原始文件.
找到了几个其他线程,但没有一个是基于SlowCheetah的解决方案,任何建议都会有所帮助.请注意,我使用的是Install Shield Limited Edition,因此该解决方案需要适用于.msi/setup文件.此外,我不想链接文件并对链接文件应用转换,因为我将不得不对所有引用的项目进行相同的转换.
谢谢
slowcheetah ×10
msbuild ×6
web-config ×3
c# ×2
.net ×1
app-config ×1
appsettings ×1
asp.net ×1
transform ×1
webdeploy ×1
xslt ×1