Может ли MSBuild исключить «скрытые» параметры веб-развертывания из созданного файла SetParameters.xml? - PullRequest
3 голосов
/ 29 сентября 2011

В моем файле Parameters.xml у меня есть пара параметров, которые используют синтаксис Web Deploy для обозначения других параметров, например, такой, который ссылается на параметр IIS Web Application Name:

<parameter name="MyParam"
           defaultValue="{IIS Web Application Name}/Web.config"
           tags="Hidden"/>

Моя проблема заключается в том, что VS автоматически импортирует этот параметр в мой файл SetParameters.xml , когда я собираю пакет развертывания, несмотря на то, что он помечен как скрытый.Когда он передается в msdeploy через setParamFile, Web Deploy буквально интерпретирует значение параметра как

{IIS Web Application Name}/Web.config

, а не подставляет имя приложения IIS.

Если I удалить параметр из автоматически сгенерированного файла SetParameters.xml , переменная работает как положено.Есть ли способ предотвратить включение VS этого параметра в первую очередь, по имени или по тегу?

Ответы [ 2 ]

1 голос
/ 31 октября 2011

Это было на самом деле намного проще, чем я думал, учитывая ответ на мой предыдущий вопрос .

Мне просто нужно было добавить Скрытый тег в цель, которая следует за AddIisAndContentDeclareParametersItems. Это, очевидно, устанавливает тег в исходном манифесте до сборки пакета. В конечном итоге это выглядит примерно так:

<Target Name="DeclareCustomParameters" 
        AfterTargets="AddIisAndContentDeclareParametersItems">
  <ItemGroup>
    <MsDeployDeclareParameters Include="Foo">
      <!-- <snip> -->
      <!-- the following elements are the important ones: -->
      <Tags>Hidden</Tags>  
      <ExcludeFromSetParameter>True</ExcludeFromSetParameter>
    </MsDeployDeclareParameters>
  </ItemGroup>
</Target>

Вот и все!

0 голосов
/ 26 апреля 2017

Этот ответ для всех, кто ищет более полный пример замены через цели.В этом примере показано подстановка переменной «имя сервера базы данных» в строку подключения.

Элемент ExcludeFromSetParameter, по-видимому, является ключом к выполнению подстановки, поскольку он удерживает параметр вне файла SetParameters.xml (как упоминал OP, он делал это вручную).К сожалению, я не думаю, что ExcludeFromSetParameter может быть установлен из файла parameters.xml, так что это единственный вариант ...

<Target Name="DeclareCustomParameters" BeforeTargets="Package">
    <ItemGroup>

        <MsDeployDeclareParameters Include="DatabaseServer">
            <Description>Location of the database server hosting the user database</Description>
            <Value>localhost</Value>
            <DefaultValue>localhost</DefaultValue>
            <Tags>DBServer, SQL</Tags>
        </MsDeployDeclareParameters>    

        <MsDeployDeclareParameters Include="DB Connection String">
            <Kind>XmlFile</Kind>
            <Scope>Web.config</Scope>
            <Match>/configuration/connectionStrings/add[@name='Database']/@connectionString</Match>
            <Description>The connection string to the Database</Description>
            <DefaultValue>Data Source={DatabaseServer};Initial Catalog=MyDatabase;Integrated Security=true;MultipleActiveResultSets=true;</DefaultValue>
            <Tags>Hidden</Tags>
            <ExcludeFromSetParameter>True</ExcludeFromSetParameter>
        </MsDeployDeclareParameters>

    </ItemGroup>
</Target>
...