我们有许多配置转换,使我们能够使用web.config中指定的正确选项发布到特定环境.
但是,在指定特定构建配置的同时在本地运行应用程序会很有用.这将使我们能够在本地运行应用程序,并将其连接到实时数据库,例如,在追踪错误时非常方便.
但是,当我们按F5在本地运行应用程序时,无论当前选择的构建配置如何,都不会发生web.config文件的转换.
这是正常行为,是否可以改变它?
我有一个引用了很多WCF服务的C#项目.对于本地测试,我想替换身份标记的内容,以便它接受在localhost上运行的任何内容.
以下转换有效,但仅在第一个匹配位置插入dns元素.因此,如果我引用了5个端点,则会有一个dns标记,而其他端点都会有空的标识元素.
<system.serviceModel>
<client>
<endpoint>
<identity>
<dns xdt:Transform="Insert" value="localhost"/>
<userPrincipalName xdt:Transform="RemoveAll" value="someIdentity" />
</identity>
</endpoint>
</client>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)
如何更改所有匹配元素,而不仅仅是第一个?
我有以下设置:ASP.Net MVC .Net 4.0解决方案,其中包含5个项目,以及多个解决方案配置(Site1-Stage,Site1-Live,Site2-Stage等).原因很简单 - 我们将相同的代码库部署到具有不同配置设置的多个服务器.
为了管理这些配置,我使用Troy Hunt所描述的方法,你的部署错了!TeamCity,Subversion和Web Deploy第1部分:Config转换文章.用两个词 - 我的SVN 仓库中没有web.config,而是在项目AfterBuild目标中有Web.Base.Config,Web.Site1-Stage.Config等和XmlTransformation任务.在构建期间,将根据所选配置生成所需的web.config:
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="AfterBuild">
<TransformXml Source="Web.Base.config" Transform="Web.$(Configuration).config" Destination="Web.config" StackTrace="true" />
</Target>
Run Code Online (Sandbox Code Playgroud)
问题出在这里:当我执行MSBuild时:
msbuild MySolution.sln /P:configuration=Site1-Stage /t:rebuild
Run Code Online (Sandbox Code Playgroud)
一切顺利,为Site1-Stage配置正确生成了web.config .但是,如果我运行此命令:
msbuild MySolution.sln /P:configuration=Site1-Stage /t:rebuild /P:DeployOnBuild=True
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
"MySolution.sln"(重建目标)(1) - >"MySolution\MyWebProj.csproj"(重建目标)(3) - >(PreTransformWebConfig target) - > C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v10.5\Web\Microsoft.Web.Publishing.targets(1399,5):错误:将文件Web.config复制到obj\Site1-Stage\TransformWebConfig\original\Web.config失败.找不到文件'Web.config'.[MySolution\MyWebProj.csproj]
我试图在MSBuild命令行中显式添加"AfterBuild"目标:
msbuild MySolution.sln /P:configuration=Site1-Stage /t:rebuild,AfterBuild /P:DeployOnBuild=True
Run Code Online (Sandbox Code Playgroud)
但它导致了同样的错误.
为什么我需要这个:这是一个非常孤立的例子,实际上我正在尝试从TeamCity CI服务器设置自动发布.我想如果我在当前的发布步骤之前添加"Visual …
像大多数人一样,我使用teamcity作为CI工具,而且我也使用Web配置转换,很多时候都要插入配置值.
我的构建过程通常是构建整个解决方案,然后(使用msdeploypublish)将网站部署到网站.
因为我正在运行msbuild两次,所以配置转换正在运行两次,所以我最终在配置文件的最终版本中使用重复值(主要是web.config,但我还有其他版本).
有没有办法只运行一次配置转换,例如在msbuild中使用一个阻止它发生的参数?
asp.net teamcity continuous-integration web-config-transform
我对我的web.config进行了转换,如果我发布到Azure,它当前有效,但是在构建/运行时它不能在本地工作.如何在本地进行"发布",以便在我的开发框中将本地转换应用于我的web.config?
目前,我右键单击>发布到Azure,是否需要为本地框创建新的发布配置文件?有没有办法让变换在Build上工作?
我的团队爱上了发布个人资料.我们有许多测试环境,使用Web.config转换,我们可以替换每个环境中的机器名称,配置设置等,这使我们的构建/部署/测试过程更加容易.
例如:
Web.config
Web.dev.config
Web.int.config
Web.prod.config
Run Code Online (Sandbox Code Playgroud)
但是,我们有许多测试应用程序可用于访问我们的Web服务,实现为控制台应用程序.我们希望能够在这些配置文件上进行相同类型的转换,这样我们就可以在拾取构建丢弃时减少与手动编辑配置文件相关的测试手工操作.
基本上,我们想要这个:
App.config
App.dev.config
App.int.config
App.prod.config
Run Code Online (Sandbox Code Playgroud)
我对这些配置转换的理解是它们与我们的Web项目中相应的发布配置文件相关:
Properties
PublishProfiles
dev.pubxml
int.pubxml
prod.pubxml
Run Code Online (Sandbox Code Playgroud)
我试图将类似的文件添加到我们的控制台应用程序项目中,但我怀疑它是Web发布MSBuild目标中实际使用它们的东西.
有没有办法专门挂钩到构建的这一部分,以便我们可以转换非Web配置?
所以当有人将我的nuget包添加到他们的代码中时,我正在尝试替换dependentAssembly.
我想改变的程序集是:
<dependentAssembly>
<assemblyIdentity name="Common.Logging.Core" publicKeyToken="af08829b84f0328e" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)
因此,我使用此xml文件并提供以下帮助:Web.config转换 - 缺少的手册
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly xdt:Transform="Replace" xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name:'Common.Logging.Core')">
<assemblyIdentity name="Common.Logging.Core" publicKeyToken="af08829b84f0328e" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="2.2.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)
但是我收到了错误:在项目中将转换应用于'web.config'时发生错误:'blabla'具有无效的限定名称.
注意到当我将"Replace"更改为"Remove"时,它会删除完整的dependentAssembly,但不知何故,它会再次将相同的dependentAssembly添加到web.config中.也许是因为在web.config转换后添加了Common.Logging.Core依赖项?
也许这就是替换不起作用的原因?
是否可以根据所选的Web发布配置文件更改连接字符串(或仅服务器主机)?也许使用Web.config转换或其他方式?
我的意思是对于配置文件"测试"将连接字符串"MyConnString"(在已发布的Web.config中)更改"Data Source='example.com,14333;..."为配置文件"生产" - 到"Data Source=./SQLExpress;..."
asp.net web-config visual-studio web-config-transform msbuild-wpp
今天检查AppHarbor.我的主要问题是标题,但我还有其他与git + windows相关的问题.
首先,与此视频相关.我喜欢我可以为部署指定配置转换的想法.我的问题是,它必须是Web.Release.config转换吗?我实际上想通过将其用作集成测试的qa部署来测试它.我可以将变换指定为Web.DeployToAppHarbor.config吗?
其次,我已经读过有关crlf问题的内容.当我跑步时git add .,我应该得到所有这些消息吗?
warning: CRLF will be replaced by LF in [path].
The file will have its original line endings in your working directory.
Run Code Online (Sandbox Code Playgroud)
沿着这些方向,我还应该在跑完之后得到所有这些信息git commit -m "Initial commit"吗?
create mode 100644 [path]
Run Code Online (Sandbox Code Playgroud)
如果这些都是正常的,有没有办法让git bash不那么冗长?
在Visual Studio中,我正在开发的网站上有一些Javascript代码。在调试的同时,我在使用$ ajax调用“ localhost”。部署后,它将需要是实际的服务器:
$('#textInput_UserName').focusout(function () {
var _username = $('#textInput_UserName').val();
$.ajax({
url: 'http://localhost:8809/Account/UserNameExists/',
data: { username: _username },
dataType: 'html',
});
Run Code Online (Sandbox Code Playgroud)
发布时,我需要将该本地主机转换为实际域:
$('#textInput_UserName').focusout(function () {
var _username = $('#textInput_UserName').val();
$.ajax({
url: 'http://www.mydomain.com/Account/UserNameExists/',
data: { username: _username },
dataType: 'html',
});
Run Code Online (Sandbox Code Playgroud)
是否有简单/自动的方法来完成此工作,类似于Web Config转换的工作方式?
非常感谢!
web-config ×7
asp.net ×5
c# ×2
msbuild ×2
app-config ×1
appharbor ×1
deployment ×1
git ×1
javascript ×1
msbuild-wpp ×1
teamcity ×1