在VS 2010云服务项目中重命名Web角色

时间:2010-10-22 20:57:11

标签: asp.net-mvc visual-studio-2010 azure

我刚刚开始使用VS 2010来创建Cloud Service(HealthTracker),并且我附加了一个MVC2 Web项目。当我点击Debug时,启动了开发结构,我能够按照预期在我的机器上浏览我的Web应用程序。

我认为MVCWebRole2对我的网络应用程序来说是一个坏名字,所以我将其重命名为HealthTrackerMVC。我使用了Refactor - >重命名以将MVCWebRole2更改为HealthTrackerMVC。我建立了干净,现在当我点击调试时,开发结构开始了,网络应用程序永远不会启动,最终它退出调试模式而没有我做任何事情。

我该如何解决这个问题?我宁愿不从一切开始......

更新

我检查了ServiceConfiguration.cscfg,ServiceDefinition.csdef和解决方案文件。所有名称都匹配,并且所有GUID都匹配。我甚至重命名了包含HealthTrackerMVC(以前称为MVCWebRole2)的文件夹,并编辑了解决方案文件以指向新项目。一切都正确加载和构建。开发结构显示HealthTrackerMVC开始,说它很忙,然后很快关闭它。请参见随附的屏幕截图:
alt text

所以我知道我的网络角色正在启动...为什么它会这么快关闭?

3 个答案:

答案 0 :(得分:2)

检查Azure配置文件,因为它们都引用了角色名称,我不相信VS的重构命令命中。如果您的项目正在构建且角色根本没有启动,则最有可能的原因是角色不知道该从哪里开始。

ServiceDefinition.csdef

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="YourAzureService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="HealthTrackerMVC" vmsize="Small" enableNativeCodeExecution="true">

...

ServiceConfiguration.cscfg

<?xml version="1.0"?>
<ServiceConfiguration serviceName="YourAzureService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
    <Role name="HealthTrackerMVC">

...

如果不起作用,请右键点击解决方案资源管理器中Cloud Service项目下的“角色”。 ADD菜单应该有“解决方案中的Web角色项目”选项。选择它并链接新角色。此时也删除旧角色


如果仍然无效,请转到存储项目的文件系统,然后在文本编辑器中打开.ccproj文件(Cloud Service Project)。

查找对上一个角色的引用(ccproj是MSBUILD格式)。它将类似于:

 <ItemGroup>
    <ProjectReference Include="Folder\MVCWebRole2.csproj">
      <Name>YourAzureService</Name>
      <Project>{26f72b59-1423-4175-b401-9c8f5f45db2a}</Project>
      <Private>True</Private>
      <RoleType>Web</RoleType>
      <RoleName>MVCWebRole2</RoleName>
    </ProjectReference>
  </ItemGroup>

更改对新HealthTrackerMVC项目(名称和.csproj ref)的引用,你应该好好去。 项目GUID很可能没有改变,但如果它以某种方式完成,只需打开SLN文件即可获得该数字。

更改此VS后,应提示重新加载解决方案/项目。如果没有,你应该重新加载。

答案 1 :(得分:1)

我建议检查Web.config和实际启动逻辑(即已知Azure结构以无效的Web配置静默杀死Web项目而不会引发任何错误;这就是我的生活激动几次)。

只是一些想法。例如,您可以尝试单独启动Web项目(就像通常的项目一样)。如果可行 - 删除现有Web角色并向解决方案添加新角色(引用此Web项目)并尝试在开发结构中运行它。如果没有,但Web项目单独运行 - 将其导出为新的解决方案并在那里添加新的Web角色。

答案 2 :(得分:0)

这是一个很长的镜头,但是如果你覆盖了RoleEntryPoint并覆盖了Run方法,它应该包含类似

的内容
public override void Run()
{
    while (true)
    {
        Thread.Sleep(8000);
    }
}

如果此方法返回,您的应用程序将停止。