2014-09-04 6 views
12

Sto utilizzando per distribuire un'applicazione Web tramite .MSDeploy - Consenti parametro facoltativo/vuoto in parameters.xml

Sto usando un file paramaters.xml di manipolare in particolare la sezione applicazione settings della mia domanda ,.

Ho alcune impostazioni in cui è valido solo avere un valore per un ambiente specifico e il resto del tempo il valore deve essere vuoto (vale a dire, la proprietà deve avere un valore solo su produzione). Tuttavia, MSDeploy mi dà questa eccezione quando faccio non specificare un valore:

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) 

Come posso configurare MSDeploy per consentire un parametrodi avere un valore vuoto?

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> 

risposta

30

mi sono imbattuto in questo problema un po 'indietro e ho trovato la soluzione a Richard Szalay's blog. È necessario aggiungere il parameterValidation al parametro dichiarazione:

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

Quindi per il vostro caso specifico:

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

Grazie che ha fatto! E benvenuti a SO –

+2

Voglio solo sottolineare che questa [pagina IIS.net] (http://www.iis.net/learn/develop/windows-web-application-gallery/reference-for-the-web-application -package) non funziona con MsBuild 14. 'parameterValidation' dovrebbe avere attributo' kind' invece di 'type'. –

4

Penso che stai cercando <parameterValidation />.

Nel vostro parameters.config:

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