Visual Studio发布使用调试模式而不是发布

时间:2013-07-09 14:57:53

标签: c# asp.net-mvc-4 azure build .net-4.5

设置如下:

.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/0文件})。这样,我就可以看到包含我的网站和服务的sitesroot/1.csproj文件夹。这些包含源代码,甚至是bin文件。为了比较,我检查了云上的另一个解决方案,它只有.js文件夹,唯一未编译的代码是视图和<compilation debug="false"> 脚本和样式表。

我确保各个项目配置中的编译元素看起来像这样:

{{1}}

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

此问题显示相关问题: VS publish to azure uses debug instead of release

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

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

1 个答案:

答案 0 :(得分:1)

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

我已经设法在这篇文章之后解决了这个问题:

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

需要做的是:

  1. 在每个站点上设置prebuild和postbuild事件,以便将内置的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>