我已经看到了一些问题,阅读了所有帖子,但我仍然无法完成这项工作。要么我错过了什么,要么无法完成..
所以我有一个相当简单的(ASP.NET MVC)项目。在我项目的根目录下有一个parameters.xml文件,里面有参数定义,比如:
<?xml version="1.0" encoding="utf-8" ?>
<parameters>
<parameter
name="Realm"
description="Realm for ADFS authentication"
defaultValue="http://somewebsite">
<parameterEntry
kind="XmlFile"
scope="Web.config"
match="/configuration/appSettings/add[@key='ida:Realm']/@value" />
<parameterEntry
kind="XmlFile"
scope="Web.config"
match="/configuration/system.identityModel/identityConfiguration/audienceUris/add/@value" />
<parameterEntry
kind="XmlFile"
scope="Web.config"
match="/configuration/system.identityModel.services/federationConfiguration/wsFederation/@realm" />
到目前为止,一切都很好。这个结构很好理解,一个部署参数的名称(例如“Realm”)一个它的默认值,以及一些可以在 Web.config 文件中找到的 XCLT 选项。
现在,当我创建部署包时,通过运行 Publish,我得到一个目录,其中包含:
- 用于部署的自动生成的 cmd 文件
- 自述文件
- 清单 XML 文件
- 一个 zip 文件,其中包含必须部署到我的服务器的所有文件。
- .SetParameters.xml 文件
最后一个文件包含我在上面引用的 parameters.xml 文件中设置的参数值,并且这些值被设置为在那里定义的默认值。
例如,如果 Realm 的默认值设置为http://somewebsite,在生成的部署 SetParameters.xml 中,我会得到这条记录:
<setParameter name="Realm" value="http://somewebsite" />
部署包后,这些值将从该 xml 文件中获取,并根据原始 parameter.xml 文件中定义的 XPath 替换我的 Web.Config 中的值。
现在,我想要的是在构建部署包时覆盖此参数(以及许多其他参数),因为我需要为不同的部署配置文件提供不同的值。
关键似乎是我的 .pubxml 文件,它负责发布设置。我尝试了很多选项,包括 Sayed Hashimi在这里所说的,以前在这里和这里给出的答案,这里也是(和其他人也是)......对于该死的参数似乎没有任何影响!
我错过了什么吗?有什么神奇的技巧吗?
我应该完全忽略这些参数而只依赖匹配的 web.config 转换吗?还有什么建议吗?也许将自定义目标添加到 .csproj 文件?(甚至尝试过......)
谢谢!阿隆。