2014-09-04 52 views
12

我使用通过部署 Web应用程序。MSDeploy - 允许参数在parameters.xml中为可选/空的

我正在使用paramaters.xml文件来操纵我的应用程序的,特别是应用程序settings部分。

我有一些设置,它只是有效的一个特定的环境值,其余的时间值应该是空白的(即属性应该只有一个生产值)。然而,MSDeploy给了我这个例外,当我做指定值:

Microsoft.Web.Deployment.DeploymentException: 
    The 'facebookUserToken' argument cannot be null or empty. 
    at Microsoft.Web.Deployment.DeploymentSyncParameterValidation.Validate(String parameterName, String parameterValue) 
    at Microsoft.Web.Deployment.DeploymentSyncParameter.set_Value(String value) 
    at Microsoft.Web.Deployment.DeploymentSyncParameterCollection.LoadFromFile(XPathNavigator nav, String fileName, Boolean ignoreExtraSetParameters) 
    at Microsoft.Web.Deployment.DeploymentSyncParameterCollection.Load(Stream stream, String fileName, Boolean ignoreExtraSetParameters) 
    at Microsoft.Web.Deployment.DeploymentSyncParameterCollection.Load(String fileName, Boolean ignoreExtraSetParameters) 
    at MSDeploy.MSDeploy.HandleSetParameters(DeploymentObject sourceObject, Random random) 
    at MSDeploy.MSDeploy.ExecuteWorker() 
    at MSDeploy.MSDeploy.Execute() 
    at MSDeploy.MSDeploy.Main(String[] unusedArgs) 

如何配置MSDeploy允许参数有一个空值?

的web.config:

<applicationSettings> 
    <SO.Example> 
     <setting name="FacebookUserToken" serializeAs="String"> 
      <value></value> 
     </setting> 
    </SO.Example> 
</applicationSettings> 

parameters.config:

<parameter name="facebookUserToken" description="" defaultValue=""> 
     <parameterEntry kind="XmlFile" scope="Web.config" 
     match="XPath removed for readability"> 
     </parameterEntry> 
    </parameter> 

回答

30

我碰到这个问题跑了一段时间后,发现该溶液在Richard Szalay's blog。您需要将parameterValidation添加到您的参数声明:

<parameters> 
    <parameter name="ReplaceVariable" 
      description="Sample variable that allows empty values" defaultValue=""> 
    <parameterValidation kind="AllowEmpty" /> 
    <parameterEntry type="TextFile" scope="Web\.config$" match="TextToReplace" /> 
    </parameter> 
</parameters> 

因此,对于您的具体情况:

<parameter name="facebookUserToken" description="" defaultValue=""> 
     <parameterValidation kind="AllowEmpty"/> 
     <parameterEntry kind="XmlFile" scope="Web.config" 
     match="XPath removed for readability"> 
     </parameterEntry> 
    </parameter> 
+0

感谢那些做到了!欢迎来到SO – 2014-09-04 11:25:38

+2

我只想指出这[IIS.net页面](http://www.iis.net/learn/develop/windows-web-application-gallery/reference-for-the-web-application -package)不能用于MsBuild 14.'parameterValidation'应该有'kind'属性而不是'type'属性。 – 2015-11-18 01:02:31

4

我认为你正在寻找<parameterValidation />

在你parameters.config:

<parameter name="facebookUserToken" description="" defaultValue=""> 
    <parameterValidation kind="AllowEmpty" /> 
    <parameterEntry kind="XmlFile" scope="Web.config" 
     match="XPath removed for readability"> 
    </parameterEntry> 
</parameter>