如何在发布期间定位.Net 4.5.2时绕过警告

时间:2016-01-19 16:17:37

标签: .net azure azure-web-roles

我的Azure服务目标.Net 4.5.2并在开发中运行良好。但是,build会产生警告:

  

警告项目'SurfInfoWeb'的目标是.NET Framework 4.5.2。至   确保角色启动,这个版本的.NET Framework   必须在虚拟机上安装此角色。你可以使用   启动任务以安装所需的版本(如果尚未安装)   作为Microsoft Azure来宾操作系统的一部分安装。

我相信这些(本地)警告会导致发布立即失败(这些是错误列表中唯一的警告)。

根据MS,4.5.2应该在2016年1月上市(我不确定到底是什么日期,但我以为我读过1月12日或1月16日)。

我无法以正常方式抑制这些警告,因为它们没有警告代码。

1)Azure上实际可用.Net 4.5.2

2)有没有办法抑制没有代码的警告?

3)我还没想到别的什么?

我正在使用SDK 2.8.1。 OSVersion =“*”。

4 个答案:

答案 0 :(得分:8)

  

.Net上实际可以使用.Net 4.5.2吗?

Yes。 .NET 4.5.2在osVersion 2,3和4的当前osFamily *中可用。

  

有没有办法抑制没有代码的警告?

升级到Azure SDK 2.9的云服务项目不再生成此警告。使用SDK早期版本的项目(即使安装了2.9版本)仍会生成此警告。要在不将项目升级到SDK 2.9的情况下取消此警告,您可以将以下代码段添加到.ccproj文件中。

<ItemGroup> <WindowsAzureFrameworkMoniker Include=".NETFramework,Version=v4.5.2" /> </ItemGroup>

答案 1 :(得分:2)

根据此处提供的评论 - https://azure.microsoft.com/en-in/documentation/articles/cloud-services-dotnet-install-dotnet/,我们无法取消此警告。

enter image description here

  

.Net上实际可以使用.Net 4.5.2吗?

截至今天,是的。 Azure上提供.Net 4.5.2。事实上,我们几天前将我们的解决方案从.Net 4.5移植到.Net 4.5.2。

为了使用.Net 4.5.2,您不能使用&#34; *&#34;对于osVersion。您需要定位特定的操作系统版本。请在此处查看来宾操作系统/目标框架版本矩阵:https://azure.microsoft.com/en-in/documentation/articles/cloud-services-guestos-update-matrix/

我们的解决方案使用osFamily 4并基于此矩阵,我们最终使用WA-GUEST-OS-4.26_201511-02 osVersion。以下是我们的服务配置文件的样子:

<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="ServiceName" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="WA-GUEST-OS-4.26_201511-02" schemaVersion="2015-04.2.6">
  <Role name="RoleName">
  </Role>
</ServiceConfiguration>

答案 2 :(得分:0)

我正在获得与此错误类似的版本,实质上是该错误的新版本:

  

Microsoft Azure云服务项目仅支持在以下位置运行的角色   .NET Framework版本4.0,   4.5和4.6。请将项目“ MyWorkerRole”的项目设置中的“目标框架”属性设置为.NET Framework 4.0,.NET   Framework 4.5或.NET Framework 4.6。

  

项目“ MyWorkerRole”针对.NET Framework 4.7.2。确保;确定   角色开始,此版本的.NET Framework必须是   在虚拟机上安装此角色。您可以使用启动   任务以安装所需的版本(如果尚未安装)   作为Microsoft Azure来宾操作系统的一部分。有关更多详细信息,请参见   https://go.microsoft.com/fwlink/?LinkId=309796

即使按照消息中链接的指示进行操作(这对创建安装程序脚本等很有帮助),警告消息也没有消失。我尝试了各种方法,包括框架别名项目组,各种属性等。

最终,我最终在Detailed输出中打开了我的构建,弄清楚了这是来自.targets文件并进行了检查。 -我发现没有内置的方法可以抑制它。

但是,您可以采取一些措施-我基本上将那个块从.targets文件复制到了我的.ccproj文件中,并删除了有关警告的部分。基本上,我在.ccproj文件和 BADAO! 的末尾添加了以下内容,就像没有更多警告!

<Target Name="ValidateRoleTargetFramework"
        Outputs="%(RoleReference.Identity)"
        Condition="'@(RoleReference)' != ''">

  <PropertyGroup>
    <_RoleTargetFramework>%(RoleReference.RoleTargetFramework)</_RoleTargetFramework>
    <_IsValidRoleTargetFramework>False</_IsValidRoleTargetFramework>
    <_IsValidRoleTargetFramework
      Condition="$(_RoleTargetFramework.StartsWith('v4.0')) Or $(_RoleTargetFramework.StartsWith('v4.5')) Or $(_RoleTargetFramework.StartsWith('v4.6'))">True</_IsValidRoleTargetFramework>
  </PropertyGroup>

</Target>

(显然,您应该将它放在您的<Project />标签中。)

答案 3 :(得分:-1)

您应该在webrole虚拟机上安装.net 4.5.2。

下载要安装的.NET框架的Web安装程序 .NET 4.5.2 Web Installer

对于网络角色

  1. 在解决方案资源管理器中,在云服务项目的“角色”下,右键单击您的角色,然后选择“添加”&gt;“新建文件夹”。
  2. 创建名为bin的文件夹 右键单击bin文件夹,然后选择Add&gt; Existing Item。选择.NET安装程序并将其添加到bin文件夹。
  3. 为您的角色定义启动任务 的 ServiceDefinition.csdef中 <LocalResources> <LocalStorage name="NETFXInstall" sizeInMB="1024" cleanOnRoleRecycle="false" /> </LocalResources> <Startup> <Task commandLine="install.cmd" executionContext="elevated" taskType="simple"> <Environment> <Variable name="PathToNETFXInstall"> <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/LocalResources/LocalResource[@name='NETFXInstall']/@path" /> </Variable> </Environment> </Task> </Startup>
  4. 创建文件install.cmd并通过右键单击该角色并选择添加&gt;现有项目将其添加到角色。
  5. <强> INSTALL.CMD

    ```

    REM Set the value of netfx to install appropriate .NET Framework. 
    REM ***** To install .NET 4.5.2 set the variable netfx to "NDP452" *****
    REM ***** To install .NET 4.6 set the variable netfx to "NDP46" *****
    REM ***** To install .NET 4.6.1 set the variable netfx to "NDP461" *****
    set netfx="NDP46"
    
    REM ***** Needed to correctly install .NET 4.6.1, otherwise you may see an out of disk space error *****
    set TMP=%PathToNETFXInstall%
    set TEMP=%PathToNETFXInstall%
    
    REM ***** Setup .NET filenames and registry keys *****
    if %netfx%=="NDP461" goto NDP461
    if %netfx%=="NDP46" goto NDP46
        set netfxinstallfile="NDP452-KB2901954-Web.exe"
        set netfxregkey="0x5cbf5"
        goto logtimestamp
    
    :NDP46
    set netfxinstallfile="NDP46-KB3045560-Web.exe"
    set netfxregkey="0x60051"
    goto logtimestamp
    
    :NDP461
    set netfxinstallfile="NDP461-KB3102438-Web.exe"
    set netfxregkey="0x6041f"
    
    :logtimestamp
    REM ***** Setup LogFile with timestamp *****
    set timehour=%time:~0,2%
    set timestamp=%date:~-4,4%%date:~-10,2%%date:~-7,2%-%timehour: =0%%time:~3,2%
    md "%PathToNETFXInstall%\log"
    set startuptasklog="%PathToNETFXInstall%log\startuptasklog-%timestamp%.txt"
    set netfxinstallerlog="%PathToNETFXInstall%log\NetFXInstallerLog-%timestamp%"
    
    echo Logfile generated at: %startuptasklog% >> %startuptasklog%
    echo TMP set to: %TMP% >> %startuptasklog%
    echo TEMP set to: %TEMP% >> %startuptasklog%
    
    REM ***** Check if .NET is installed *****
    echo Checking if .NET (%netfx%) is installed >> %startuptasklog%
    reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" /v Release | Find %netfxregkey%
    if %ERRORLEVEL%== 0 goto end
    
    REM ***** Installing .NET *****
    echo Installing .NET: start /wait %~dp0%netfxinstallfile% /q /serialdownload /log %netfxinstallerlog% >> %startuptasklog%
    start /wait %~dp0%netfxinstallfile% /q /serialdownload /log %netfxinstallerlog% >> %startuptasklog% 2>>&1
    
    :end
    echo install.cmd completed: %date:~-4,4%%date:~-10,2%%date:~-7,2%-%timehour: =0%%time:~3,2% >> %startuptasklog%
    

    ```

    您可以在此处获取完整的详细程序:

    Install .NET on a Cloud Service Role

    我认为您应该实施此解决方法,直到您的区域尚不支持Azure完全支持.net 4.5.2。尝试在EastUS中创建新的云实例以测试是否已支持net fx 4.5.2。 / p>