Размещение веб-роли Azure с виртуальным приложением отправляет весь проект и не обрабатывает преобразования конфигурации.

Это довольно длинный вопрос, но он объясняет его довольно хорошо.

У меня есть веб-роль с корневым сайтом, который перенаправляет виртуальные приложения под этим сайтом. Мой проект отлично работает локально и почти отлично работает в облаке. Я использую новую конфигурацию сборки, чтобы заставить мой сайт web.config работать в Azure (так как мне нужно использовать состояние сеанса sql).

Во всяком случае, после проверки моего размещенного сайта я вижу 3 сайта в папках 0, 1, 2 соответственно. 0 представляет мой корень, и содержимое этой папки является минимальным для размещенного приложения, только мой bin, default.aspx, packages и web.config. Это прекрасно работает, и я вижу, как это работает, следя за сессиями в моей базе данных.

Тем не менее, при проверке любой из других (идентичных) папок, представляющих виртуальные приложения, я вижу проект ENTIRE visual studio там как есть. Файлы кода, преобразования web.config и т. Д. Более того, преобразования фактически не обрабатываются. Весь проект просто сброшен туда.

Я использовал Visual Studio 2010 для публикации своего приложения в моей веб-роли. Я не вижу ничего очевидного в настройках, чтобы контролировать это поведение. Вот часть моего файла определения сервиса, если это поможет.

<WebRole name="root" vmsize="Small">
    <Sites>
      <Site name="Web">
        <VirtualApplication name="en" physicalDirectory="../../../sitefolder" />
        <VirtualApplication name="en-gb" physicalDirectory="../../../sitefolder" />
        <Bindings>
          <Binding name="Endpoint1" endpointName="Endpoint1" />
        </Bindings>
      </Site>
    </Sites>
    <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="http" port="80" />
    </Endpoints>
    <Imports>
      <Import moduleName="Diagnostics" />
      <Import moduleName="RemoteAccess" />
    </Imports>
  </WebRole>
<WorkerRole name="emailer" vmsize="ExtraSmall">
    <Imports>
      <Import moduleName="Diagnostics" />
      <Import moduleName="RemoteAccess" />
      <Import moduleName="RemoteForwarder" />
    </Imports>
</WorkerRole>

Там также есть настройки конфигурации, но я их пропустил. Большое спасибо за любую помощь здесь.

РЕДАКТИРОВАТЬ 1 Вот файл моего проекта Windows Azure в моем решении после внесения изменений, подробно описанных здесь: http://michaelcollier.wordpress.com/2013/01/14/multiple-sites-in-a-web-role/

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
*** entire content as normal and untouched manually ***
<!-- Import the target files for this project template -->
  <PropertyGroup>
    <VisualStudioVersion Condition=" '$(VisualStudioVersion)' == '' ">10.0</VisualStudioVersion>
    <CloudExtensionsDir Condition=" '$(CloudExtensionsDir)' == '' ">$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Windows Azure Tools\2.0\</CloudExtensionsDir>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Staging01' ">
    <OutputPath>bin\Staging01\</OutputPath>
  </PropertyGroup>
  <PropertyGroup>
    <!-- Inject the publication of "secondary" sites into the Windows Azure build/project packaging process. -->
    <CoreBuildDependsOn>
      CleanSecondarySites;
      PublishSecondarySites;
      $(CoreBuildDependsOn)
    </CoreBuildDependsOn>
    <!-- This is the directory within the web application project directory to which the project will be "published" for later packaging by the Azure project. -->
    <SecondarySitePublishDir>azure.publish\</SecondarySitePublishDir>
  </PropertyGroup>
  <!-- These SecondarySite items represent the collection of sites (other than the web application associated with the role) that need special packaging. -->
  <ItemGroup>
    <SecondarySite Include="..\bobblejob.com\bobblejob.com.csproj" />
  </ItemGroup>
  <Target Name="CleanSecondarySites">
    <RemoveDir Directories="%(SecondarySite.RootDir)%(Directory)$(SecondarySitePublishDir)" />
  </Target>
  <Target Name="PublishSecondarySites" Condition="'$(PackageForComputeEmulator)' == 'true' Or '$(IsExecutingPublishTarget)' == 'true' ">
    <MSBuild Projects="%(SecondarySite.Identity)" Targets="Build;_WPPCopyWebApplication" Properties="Configuration=$(Configuration);Platform=$(Platform);WebProjectOutputDir=$(SecondarySitePublishDir)" />
  </Target>
  <Import Project="$(CloudExtensionsDir)Microsoft.WindowsAzure.targets" />
</Project>

Чтобы сделать эту компиляцию, мне пришлось вручную создать папку "azure.publish" в моей папке bobblejob.com. Может ли ошибка быть там, где вы сказали, что сборка должна выполняться только тогда, когда IsExecutingPublishTarget имеет значение true? Я хочу, чтобы это работало на моем компьютере разработчика и во всех развертываниях, которые я настроил...

- 11/09/13 - это все еще проблема. У кого-нибудь есть решение?

2 ответа

Решение

Я думаю, что вы столкнулись с проблемой, очень похожей на ситуацию, о которой я писал в начале этого года. См. http://michaelcollier.wordpress.com/2013/01/14/multiple-sites-in-a-web-role/

По сути, когда Visual Studio упаковывает вашу веб-роль, она "не знает", что файлы, указанные в атрибуте PhysicalDirectory, являются веб-проектами и, следовательно, не выполняет никаких обычных операций сборки (компиляция, преобразование конфигурации и т. Д.).

Мой пост в блоге описывает способ обойти это путем добавления некоторых пользовательских действий в процесс сборки. Надеюсь, поможет!

У меня наконец-то это работает, и это благодаря ссылке выше.

Когда я впервые попробовал этот метод, он не сработал. С тех пор я повторил, и это сработало - перейдите по ссылке выше. Я полагаю, что между попытками обоих методов, которые я прочитал в MSBuild, я смог прочитать и понять, что происходит.

Единственное, что я сделал иначе, я назвал мою временную папку публикации "azure_publish", а не "azure.publish". Я не прочитал достаточно, чтобы знать, является ли точка зарезервированным символом.

Спасибо mcollier. Убедитесь, что вы получите комиссию от Microsoft по этому вопросу.;-)

Другие вопросы по тегам