MSDeploy - 允许在 parameters.xml 中参数是可选/空的

17

我正在使用通过部署 web应用程序。

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

我有一些设置,只有在特定环境下有值,其余时间该值应为空(即在生产环境中仅Property才有值)。但是,当我指定一个值时,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>
2个回答

40

我之前遇到过这个问题,后来在Richard Szalay的博客中找到了解决方案。你需要将parameterValidation添加到parameter声明中:

<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>

2
我只想指出这个IIS.net页面不适用于MsBuild 14。parameterValidation应该有kind属性而不是type属性。 - rino.batin

5
我认为您需要寻找<parameterValidation />。在您的parameters.config文件中:
<parameter name="facebookUserToken" description="" defaultValue=""> 
    <parameterValidation kind="AllowEmpty" />  
    <parameterEntry kind="XmlFile" scope="Web.config"
       match="XPath removed for readability">
    </parameterEntry>
</parameter>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接