我已经设置了一个新的辅助角色,并通过 SlowCheetah 为其设置了一些新的配置转换。当我使用所选的新配置之一构建项目时,我实际上看到在 \bin 文件夹下创建了 configs 文件夹,正如您所期望的那样(例如 \bin\Production)。
当我使用新配置之一打包云服务进行部署时,我的 Web 项目的配置得到了适当的转换,但我的辅助角色(这只是一个库)却没有,即使我在 \bin 文件夹下看到了更新的 \bin\生产。
看起来天蓝色打包工具忽略了辅助角色库的配置集。我怎样才能让它从适当的配置中选择配置文件?
是的,您可以做到这一点 - 一旦您知道如何操作,这甚至会非常容易。
App.config 未转换按设计但幸运的是,Azure 团队使构建/部署过程非常适合此类场景。您需要做的事情已经有相当详细的记录,尽管是以一种非常迂回的方式,并且大多数文章都假设您已经熟悉 MSBuild 脚本等。
下面您将找到需要放入项目中的行,以使此功能正常工作。这应该不会超过五分钟。请注意,这不是黑客攻击 - 整个 Azure 部署过程旨在支持此类事情。
如果您想了解更多信息,底部有一些相关文章的链接。
一些概念点
- 在Azure中实现这种事情的推荐方法是not使用 Web.config 和 App.config,但使用 CloudConfigurationManager 并使用角色设置。然而,有时这并不是正确的答案,通常是因为内置或第三方组件需要 *.config 设置(smtp、wcf、elmah 等)。
- Web Config 转换旨在仅转换 web.config。这意味着 app.config 没有被转换按设计.
- Web 配置转换被设计为仅在以下情况下启动:出版因此,当您在本地运行时,即使在云模拟器中,您的 Web.config 也不会被转换。
我们解决这个问题的方法是挂钩云项目的构建过程。当您将项目部署到 Azure 时,将使用您可以挂钩的构建过程来构建云项目。简而言之,云项目构建了 Web 和 Worker 角色,并将它们放在您的云项目下的 Obj 文件夹下。然后它运行一个过程,实质上将所有内容压缩起来,最后将结果放入 Bin 文件夹中。从那里,“zip”文件和配置文件将上传到 Azure。
解决方案
是手动编辑您的 Cloud.csproj 文件(如果您在 Visual Studio 中执行此操作,则需要先卸载项目)。
然后将其添加到结束符的正上方</project>
tag:
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.targets" />
<PropertyGroup>
<WorkerRoleDir>$(IntermediateOutputPath)WorkerRole1\</WorkerRoleDir>
<AppConfigOriginal>$(WorkerRoleDir)WorkerRole1.dll.config</AppConfigOriginal>
<AppConfigTransformer>$(SolutionDir)WorkerRole1\App.$(Configuration).config</AppConfigTransformer>
<AppConfigAfterTransformed>$(WorkerRoleDir)AfterTransformed.config</AppConfigAfterTransformed>
</PropertyGroup>
<Target Name="TransformAppConfig" AfterTargets="AfterPackageComputeService">
<Message Text="Transforming $(AppConfigOriginal) via $(AppConfigTransformer) to $(AppConfigAfterTransformed)" />
<TransformXml Source="$(AppConfigOriginal)" Transform="$(AppConfigTransformer)" Destination="$(AppConfigAfterTransformed)" />
<Copy SourceFiles="$(AppConfigOriginal)" DestinationFiles="$(WorkerRoleDir)App.Config.Original" />
<Copy SourceFiles="$(AppConfigAfterTransformed)" DestinationFiles="$(AppConfigOriginal)" />
</Target>
Notes
- 您必须修改其中的几个硬编码路径。我确信有一种方法可以让它们变软,但这需要比我更多的 MSBuild 技能。
- 转型实际上将run当您部署到本地云模拟器时,但它不会used。因此,结果与 Web.config 的行为一致,也未进行转换。但是,如果您的转换失败,即使只是在模拟器中运行,您也会收到构建错误。
- 也可以看看这另一个问题 https://stackoverflow.com/questions/6187118/app-config-transformations
- 深入探索 http://blog.slalom.com/2011/08/19/building-and-deploying-windows-azure-projects-using-msbuild-and-tfs-2010/
- Tom Hollanders 高度链接的有关直接从 MSBuild 进行部署的文章 http://blogs.msdn.com/b/tomholl/archive/2011/12/06/automated-build-and-deployment-with-windows-azure-sdk-1-6.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)