我正在尝试将Web部署工具包与我们的MVC3项目一起使用,整体部署工作正常但我们的数据库连接字符串的密码包含百分比(%)字符,后跟两个数字.部署工具包似乎正在将其转换为Hex字符替换.有没有办法防止这个字符替换并仍然保持连接字符串在开发人员机器上可用?我尝试在Web.Debug.Config文件中添加替换,甚至添加%25而不仅仅是%来尝试让它替换%字符,它仍然替换完整的值.
例:
<connectionStrings>
<add name="MyDB" connectionString="server=Server1;uid=user1;pwd=abc123%72;database=Database1;"
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
被取代
<connectionStrings>
<add name="MyDB" connectionString="server=Server1;uid=user1;pwd=abc123r;database=Database1;"
</connectionStrings>
Run Code Online (Sandbox Code Playgroud) 我试图转换我所拥有的项目中的所有web.config文件,这是我的树结构:
还有更多的web.config文件,但我们的想法是,它会找到所有这些文件并对它们应用相同的配置转换.
我从我发现的博客文章中得到了一些提示,但是我在最后一步,即实际的转变中陷入困境.中间还有一些我不喜欢的粗略部分(我不太明白我在做什么,我显然做错了).这是我到目前为止的地方:
<Project ToolsVersion="4.0" DefaultTargets="Transform" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="TransformXml" AssemblyFile="Tools\Microsoft.Web.Publishing.Tasks.dll"/>
<PropertyGroup>
<SitePath>..\..\Website</SitePath>
<WebConfigTransformInputFile>$(SitePath)\Web.config</WebConfigTransformInputFile>
<WebConfigTransformFile>Web.Transform.config</WebConfigTransformFile>
<OutDir>..\N\N\</OutDir>
</PropertyGroup>
<ItemGroup>
<_FilesToTransform Include="$(SitePath)\**\web.config"/>
</ItemGroup>
<Target Name="Transform">
<MakeDir Directories="@(_FilesToTransform->'$(OutDir)%(RelativeDir)')" />
<TransformXml Source="@(_FilesToTransform->'$(OutDir)%(RelativeDir)%(Filename)%(Extension)')"
Transform="$(WebConfigTransformFile)"
Destination="@(_FilesToTransform->'$(OutDir)%(RelativeDir)%(Filename)%(Extension)')" />
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
我的Transform.bat看起来像这样:
%systemroot%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe %CD%\Transforms\ConfigTransform.proj
Run Code Online (Sandbox Code Playgroud)
因此,当我调用批处理时,会创建相应的目录.然而,正如你所看到的,我必须对OutDir有点创意,使它成为..\N\N.出于某种原因,如果我不这样做,OutDir路径将与输入目录完全相同.所以我显然需要在MakeDir中改变一些东西,但我不确定是什么.
真正的问题出现在它开始进行变换时.我试图保持TransformXml Source参数像这样或类似:
@(_FilesToTransformNotAppConfig->'%(FullPath)')
Run Code Online (Sandbox Code Playgroud)
后者给我一个错误"无法打开源文件:不支持给定路径的格式." 而前者给了我这个输出:
Build started 30-4-2012 14:02:48.
Project "D:\Dev\transform\DoTransforms\Transforms\ConfigTransform.proj" on node 1 (default targets).
Transform:
Creating directory "..\N\N\..\..\Website\Views\".
Transforming Source File: ..\N\N\..\..\Website\Views\Web.config;..\N\N\..\..\Website\Web.config
D:\Dev\transform\DoTransforms\Transforms\ConfigTransform.proj(32,2): error : Could not open Source file: Could not …Run Code Online (Sandbox Code Playgroud) 我有一个ASP.NET 3.5 Web应用程序项目.我想将大部分内容部署到我的Web服务器上,但我想将CSS,图像和JavaScript部署到第二个"图像服务器".
如何使用Web Deploy,甚至Visual Studio 2010及更高版本的"发布"功能来实现此目的?
有人问我试过了什么.我没有尝试任何东西,因为我不知道有什么可尝试的.
我过去在Web部署方面做过一些认真的工作.我甚至使用Web Deploy来部署非Web应用程序,方法是将相应的目标手动添加到项目文件中.我有MSBUILD书(" 在Microsoft®构建引擎内部:使用MSBuild和Team Foundation Build ",由Sayed Ibrahim Hashimi和William Bartholomew 撰写)和补充,并且知道如何处理诸如向MSDEPLOY包添加额外文件之类的内容.不在项目中,添加文件夹,设置访问保护等.
我不知道该怎么做是从一个项目制作两个包,然后将这两个包部署到两个单独的服务器.
这是我可以尝试的两件事.在我的(是的,专家的)意见中,既不值得花时间.我很乐意有人告诉我我错了.
Visual Studio中的发布配置文件不仅包括有关要发布的文件和目标的信息.它还包括构建和部署的解决方案配置.我也可以
ItemGroup包含内容的元素上.实际上,单个项目将成为两个项目,具体取决于解决方案配置.我不应该说明每次将新项目添加到项目时手动编辑项目文件是多么不切实际.我认为没有实际的方法可以做我需要做的事情.我希望有人知道我不了解的实用技术 - 也许是我不知道的Web Deploy 3.5的一些功能.
Perforce是否有任何社区MSBuild任务(例如,甚至只是基本的同步)?
MSBuild社区任务或MSBuildExtenstion包似乎都没有.
好的,所以我做了蠢事并发布了针对我们的开发数据库(SQL Server 2008 R2)的生产代码(C#,VS2010).幸运的是我们还没有使用生产数据库,所以我没有尝试恢复和同步一切的痛苦......
但是,我想要防止这种情况再次发生,因为它可能会更加痛苦.我的想法是添加一个我可以在启动时查询的表,并通过返回的值确定我连接的数据库.例如,生产将返回"PROD",dev和test将返回其他值.
如果它有任何区别,应用程序会与WCF服务进行通信以访问数据库,因此我在配置文件中有端点,而不是实际的连接字符串.
这有意义吗?其他人如何解决这个问题?
谢谢,戴夫
在.NET应用程序的前端工作时,哪些基本先决条件是什么?假设我已经掌握了HTML/CSS/JavaScript以及对MVC模式及其工作方式的一般认识,我需要知道什么才能生存.还有别的事吗?
我最终使用TeamCity设置来构建源代码控制更改,并使用单独的MSBuild任务设置,使用"package"目标和生成的"deploy.cmd"脚本打包并部署到登台服务器上的IIS.在构建事件,文件包含/排除等方面,一切都很完美......
但是,我遇到了如何部署软件包的问题.每当我将程序包部署到服务器时,IIS设置都会被吹走.例如,我可以设置缓存过期标头或打开静态压缩,在部署我的包后,它们将恢复为服务器的默认值.
有谁知道我怎么能解决这个问题?是否有我可以通过的参数或我可以忽略的规则?
你能用同样的方式对另一个文件如connections.config,nlog.config,app.config进行web.config转换吗?我似乎无法找到答案.
<connectionStrings xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<add name="ApplicationServices" connectionString="Data Source=ConnectionString" xdt:Transform="SetAttributes(mode)"/>
</connectionStrings>
Run Code Online (Sandbox Code Playgroud) asp.net ×4
msdeploy ×3
slowcheetah ×3
deployment ×2
msbuild ×2
webdeploy ×2
.net ×1
asp.net-mvc ×1
database ×1
frontend ×1
iis ×1
msbuild-task ×1
perforce ×1
sql-server ×1
version ×1
wcf ×1
web-config ×1