Это довольно длинный вопрос, но он довольно хорошо его объясняет.
У меня есть веб-роль с корневым сайтом, который перенаправляет виртуальные приложения под этим сайтом. Мой проект отлично работает локально и почти отлично работает в облаке. Я использую новую конфигурацию сборки, чтобы заставить web.config моего сайта работать в Azure (поскольку мне нужно использовать состояние сеанса sql).
Во всяком случае, при проверке моего размещенного сайта я вижу 3 сайта в папках 0, 1, 2 соответственно. 0 представляет мой корень, и содержимое этой папки является минимальным для размещенного приложения, только моя корзина, default.aspx, пакеты и web.config. Это прекрасно работает, и я вижу, как это работает, отслеживая сеансы в моей базе данных.
Однако при проверке любой из других (идентичных) папок, представляющих виртуальные приложения, я вижу ВЕСЬ проект визуальной студии как есть. Файлы кода, преобразования 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? Я хочу, чтобы это работало на моем устройстве разработки и во всех развертываниях, которые я настроил...
-- 09.11.13 - это все еще проблема. У кого-нибудь есть решение?