代码之家  ›  专栏  ›  技术社区  ›  Bill O

如何在发布过程中绕过针对.Net 4.5.2的警告

  •  7
  • Bill O  · 技术社区  · 10 年前

    My Azure服务以.Net 4.5.2为目标,在开发环境中运行良好。但是,构建会产生警告:

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

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

    根据MS的说法,4.5.2应该在2016年1月推出(我不确定确切的日期,但我想我已经读到了1月12日或1月16日)。

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

    1) .Net 4.5.2在Azure上实际可用吗

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

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

    我使用的是SDK 2.8.1。OSVersion=“*”。

    4 回复  |  直到 10 年前
        1
  •  8
  •   Oleg Sych    10 年前

    .Net 4.5.2实际上在Azure上可用吗?

    Yes .NET 4.5.2在当前版本中可用 osVersion *第页,共页 osFamily 如图2、3和4所示。

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

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

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

        2
  •  2
  •   Gaurav Mantri    10 年前

    根据此处提供的意见- https://azure.microsoft.com/en-in/documentation/articles/cloud-services-dotnet-install-dotnet/ ,无法抑制此警告。

    enter image description here

    .Net 4.5.2实际上在Azure上可用吗?

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

    为了使用.Net 4.5.2,您不能将“*”用于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>
    
        3
  •  0
  •   BrainSlugs83    7 年前

    我得到了这个错误的类似版本,本质上是它的新版本:

    Microsoft Azure云服务项目仅支持在上运行的角色 .NET Framework版本4.0, 4.5和4.6。请将项目“MyWorkerRole”的项目设置中的Target Framework属性设置为.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文件的末尾添加了以下内容 八道! ,就这样 不再有警告! :

    <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 /> 标签。)

        4
  •  -1
  •   JuanK    10 年前

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

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

    对于Web角色

    1. 在解决方案资源管理器中的“在云服务项目中的角色中”下,右键单击您的角色,然后选择“添加”>新建文件夹。
    2. 创建名为bin的文件夹 右键单击bin文件夹并选择Add>现有项目。选择.NET安装程序并将其添加到bin文件夹中。
    3. 为您的角色定义启动任务 服务定义.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. 创建文件安装。cmd并通过右键单击角色并选择添加>现有项目。

    安装.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。