Как настроить развертывание основного веб-сайта asp.net?

Мне нужно опубликовать свой веб-сайт с определенным файлом web.config для каждой среды, чтобы установить для переменной среды ASPNETCORE_ENVIRONMENT значение «Разработка» или «Производство».

Этого можно добиться, отправив файл web.config с таким содержимым:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\myProject.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout">
      <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
      </environmentVariables>
    </aspNetCore>
  </system.webServer>
</configuration>

У меня есть 2 разных окружения: «Разработка» и «Производство». Я развертываю свой основной веб-сайт asp.net с помощью webploy, используя следующую команду:

msbuild myProject.csproj /p:PublishProfile=webdeploy-dev /p:DeployOnBuild=true
/p:AllowUntrustedCertificate=True /p:Password=...

В моем профиле webdeploy нет конкретных вещей

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>MSDeploy</WebPublishMethod>
    <PublishProvider>AzureWebSite</PublishProvider>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish>https://my.test.com</SiteUrlToLaunchAfterPublish>
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <MSDeployServiceURL>my.test.com</MSDeployServiceURL>
    <DeployIisAppPath>my.test.com</DeployIisAppPath>
    <SkipExtraFilesOnServer>True</SkipExtraFilesOnServer>
    <MSDeployPublishMethod>RemoteAgent</MSDeployPublishMethod> <!-- MsDepSvc , WMSVC, RemoteAgent -->
    <EnableMSDeployBackup>True</EnableMSDeployBackup>
    <AuthType>NTLM</AuthType>
    <UserName>myusername</UserName>
    <EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
  </PropertyGroup>
</Project>

Как я могу настроить свой основной проект asp.net в .csproj, профиле webdeploy или где-нибудь еще, чтобы автоматически отправлять соответствующий web.config (или изменять его содержимое) в соответствующую среду?


person Armand    schedule 25.10.2017    source источник
comment
Я смущен. Конечно, вы бы просто правильно установили переменную среды на своих целевых машинах и никогда больше не беспокоились об этом? Вы хотите сказать, что целевые машины могут меняться между разработкой и производством?   -  person Cake or Death    schedule 26.10.2017
comment
Нет, машины разные, и вы абсолютно правы @ Cal279, лучшее, что я могу сделать, - это установить эту переменную среды прямо на машине. Это уже то, что я сделал, и я считаю, что это лучшая практика. Я отправлю ответ, чтобы закрыть этот вопрос позже. Спасибо   -  person Armand    schedule 28.10.2017


Ответы (1)


Как сказал @CalC, я просто хотел установить переменную среды на целевых машинах, которые отличаются. Таким образом, публикация файла web.config, который переопределит это значение, которое может быть уже установлено локально, безусловно, опасна и определенно не является хорошим способом сделать это.

Итак, ответ таков: вы не должны публиковать web.config в своей папке публикации, а обновлять его непосредственно на целевой машине / папке. Также можно установить эту переменную среды с помощью других методов, не описанных здесь.

person Armand    schedule 10.11.2017