我有一个包含三个发布配置文件的网站解决方案,我们用它来转换每个目标环境的连接字符串:
我们还有一些应用程序设置需要针对每个环境进行转换。因此,我们使用常规的基于构建配置的转换。
当我们尝试打包测试配置文件时,这会让我们陷入困境。我们打包它,以便测试人员可以从他们的系统上部署构建工件而不是源代码。但是,测试包会选择调试应用程序设置转换。
有没有办法告诉msbuild打包网站,使用测试配置文件,但跳过配置转换?或者我应该重新构建环境中的构建配置? (也就是说,单独保留Debug和Release并为每个环境创建一个构建配置)
我正在调试解决方案配置下构建我的测试配置,它肯定会获取转换后的Web.Debug.config
文件。没有Web.Test.config文件,因为Test是“发布配置文件”而不是构建配置。
cmd> msbuild websites.sln /t:Build /p:Configuration=Debug;Platform="Any CPU";DeployOnBuild=true;DeployTarget=Package;PublishProfile=Test;VisualStudioVersion=11.0
也许我在这里做错了什么。我觉得配置/平台是多余的,因为我也在“发布配置文件”对话框中提供了这些内容。 Visual Studio版本对我来说是一个惊喜,但是生成zip包是必要的。
答案 0 :(得分:2)
我会为每个环境构建一个配置以保持一致性。但是,如果没有为特定环境(即 web.Test.config )提供配置,则您发布的版本将只使用原始 web.config中放置的内容文件而不是变换。
答案 1 :(得分:2)
如果您从命令行构建您的网站sln,您可以提供参数OutputPath: 例如
msbuild websites.sln /p:OutputPath=c:\test
如果运行打开c:\ test,您将找到一个包含所有已编译站点的文件夹_PublishedWebsites。不需要发布配置文件。 啊但是如何在不使用msdeloy和发布配置文件的情况下配置它? 您可以创建自己的XDT,例如用于调试和发布的XDT,web.config.staging添加这些文件并进行设置 构建行动:内容 复制到输出:始终复制
您可以使用xdt转换工具(如CCT)随时转换您的网络配置。 (即在Visual Studio之外 - 部署甚至重新部署) CTT很棒BTW。另外,为了更进一步,你应该制作你的XDT文件模板,并为每个环境,prod等提供属性。但这是另一种游戏。
答案 2 :(得分:2)
最后,我做了Mitch开始建议的事情 - 在解决方案/项目配置,发布配置文件和环境之间保持1:1的关系。如果你给它想要的一切,工具效果会更好。
所以,这应该是一个明智的选择
| Environment | Solution | Publish | Assembly |
| | Configuration | Profile | Configuration |
============================================================
| Test | Test | Test | Debug |
| Staging | Staging | Staging | Debug |
| Prod | Prod | Prod | Release |
我可以在发布配置文件中指定程序集构建配置(以便生产环境获得发布优化)。并且,配置/平台属性将从命令行中消失。
cmd> msbuild my.sln /t:Build /p:DeployOnBuild=true;DeployTarget=Package;PublishProfile=Staging;VisualStudioVersion=11.0
一切都以一个整洁的包文件夹结束
.\websites\somewebsite\obj\Staging\Package