0

设置是这样的:

.NET 4.5
Visual Studio 2012 
Azure 2.0

one WebRole which hosts 2 sites:
   one MVC4 
   one WCF project

当我将网站发布到云端时,它看起来像是在调试模式下工作。我通过右键单击云项目,单击发布并在提示时选择配置版本和“发布”构建版本来发布它。

为了检查发生了什么,我.cspkg通过将扩展名更改为 来打开文件.zip,并检查其中的.cssx文件(也将扩展名更改为.zip)。这让我可以看到包含我的网站和服务的文件夹sitesroot/0sitesroot/1这些包含源代码,甚至是.csproj文件。为了比较,我检查了云上的另一个解决方案,它只有bin文件夹,唯一未编译的代码是视图、.js脚本和样式表。

我确保各个项目的配置中的编译元素如下所示:

<compilation debug="false">

无论如何,无论我做什么,它看起来都会在调试模式下构建一个包。我完全不知所措,我不知道该看什么了,因为一切看起来都很好。

这个问题显示了一个相关的问题: VS publish to azure uses debug instead of release

但是他们使用 TFS 来自动化构建和发布过程,而我是手动完成的。

任何提示或指示都会派上用场。或者至少列出要检查并与其他项目进行比较的事项。

4

1 回答 1

1

经过一点(很多)的挖掘,我找到了原因。一个 Web 角色上的多个站点会导致问题。由于站点代码只是被复制到sitesroot文件夹中。

我已经设法解决了文章here之后的问题:

http://michaelcollier.wordpress.com/2013/01/14/multiple-sites-in-a-web-role/

需要做的是:

  1. 在每个站点上设置预构建和构建后事件,以负责将构建的 dll 复制到自定义构建文件夹中

    Pre (clears the custom build folder):
    rmdir "$(ProjectDir)..\YOUR-AZURE-PROJECT\Sites\$(ProjectName)" /S /Q
    
    Post (copies dlls to the custom build folder):
    %WinDir%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe "$(ProjectPath)" /T:PipelinePreDeployCopyAllFilesToOneFolder /P:Configuration=$(ConfigurationName);PreBuildEvent="";PostBuildEvent="";PackageAsSingleFile=false;_PackageTempDir="$(ProjectDir)..\YOUR-AZURE-PROJECT\Sites\$(ProjectName)"
    
  2. 将站点元素更改ServiceDefinition.csdef为指向自定义构建文件夹

    <Sites>
        <Site name="WebSite" physicalDirectory="..\..\Sites\WebSite\">
            <Bindings>
                <Binding name="Endpoint1" endpointName="Endpoint2" />
            </Bindings>
        </Site>
    </Sites>
    
于 2013-07-10T09:53:27.530 回答