设置如下:
.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自动化构建和发布过程,而我正在手动完成。
任何提示或指示都会派上用场。或至少列出要检查的内容并与其他项目进行比较。
答案 0 :(得分:1)
经过一番(很多)挖掘,我找到了原因。这是一个Web角色上的多个站点导致问题。由于站点代码只是被复制到sitesroot
文件夹中。
我已经设法在这篇文章之后解决了这个问题:
http://michaelcollier.wordpress.com/2013/01/14/multiple-sites-in-a-web-role/
需要做的是:
在每个站点上设置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)"
更改ServiceDefinition.csdef
中的网站元素以指向自定义生成文件夹
<Sites>
<Site name="WebSite" physicalDirectory="..\..\Sites\WebSite\">
<Bindings>
<Binding name="Endpoint1" endpointName="Endpoint2" />
</Bindings>
</Site>
</Sites>