5

这是一个相当冗长的问题,但它确实很好地解释了它。

我有一个 Web 角色,它有一个根站点,可以转发到该站点下的虚拟应用程序。我的项目在本地运行良好,在云中几乎可以完美运行。我正在使用新的构建配置来让我的网站的 web.config 在 Azure 上运行(因为我需要使用 sql 会话状态)。

无论如何,在检查我的托管站点后,我可以分别在文件夹 0、1、2 中看到 3 个站点。0 代表我的根目录,该文件夹的内容是托管应用程序的最小内容,只有我的 bin、default.aspx、packages 和 web.config。这很好用,我可以通过密切关注数据库中的会话来看到它的工作原理。

但是,当检查代表虚拟应用程序的其他(相同)文件夹中的任何一个时,我可以在那里看到整个 Visual Studio 项目。代码文件、web.config 转换等。此外,实际上并未处理转换。整个项目就被扔在那里了。

我已使用 Visual Studio 2010 将我的应用程序发布到我的 Web 角色。我在那里的设置中看不到任何明显的东西来控制这种行为。如果有帮助,这是我的服务定义文件的一部分。

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

为了进行编译,我必须在我的 bobblejob.com 文件夹中手动创建一个文件夹“azure.publish”。错误是否可能是您所说的构建只应在 IsExecutingPublishTarget 为真时运行?我希望它在我的开发盒以及我设置的任何和所有部署上运行......

-- 11/09/13 - 这仍然是一个问题。有没有人有解决方案?

4

2 回答 2

5

我认为您遇到的问题与我今年早些时候在博客中提到的情况非常相似。见http://michaelcollier.wordpress.com/2013/01/14/multiple-sites-in-a-web-role/

基本上,当 Visual Studio 打包您的 Web 角色时,它不“知道”由 physicalDirectory 属性指定的文件是 Web 项目,因此不会执行任何正常的构建操作(编译、配置转换等)

我的博客文章描述了一种通过在构建过程中注入一些自定义操作来解决此问题的方法。希望能帮助到你!

于 2013-09-05T14:55:18.500 回答
0

我终于有了这个工作,这要归功于上面的链接。

我第一次尝试这种方法时它不起作用。我已经重试并且它已经工作了 - 请点击上面的链接。我想在尝试两种方法之间,我已经阅读了 MSBuild,因此能够阅读并理解正在发生的事情。

我所做的唯一不同的事情是将我的临时发布文件夹命名为“azure_publish”而不是“azure.publish”。我还没有阅读足够的内容来了解​​句点是否是保留字符。

谢谢麦克利尔。确保你从微软那里获得佣金。;-)

于 2013-09-11T15:58:28.587 回答