如何在发布时针对 .Net 4.5.2 跳过警告提示

7
我的Azure服务针对.NET 4.5.2,并在开发环境中正常运行。但是,构建会产生以下警告信息:
“警告:项目 'SurfInfoWeb' 针对 .NET Framework 4.5.2。为确保角色启动,必须在此角色的虚拟机上安装此版本的.NET Framework。如果未作为Microsoft Azure客户端操作系统的一部分安装所需版本,则可以使用启动任务安装它。”
据我了解,这些(本地)警告导致发布立即失败。(这些是错误列表中唯一的警告)
根据微软的说法,在2016年1月应该提供了.NET 4.5.2(我不确定具体是哪一天,但我记得读到过1月12日或1月16日)。
我无法以正常方式忽略这些警告,因为它们没有警告代码。
1)Azure实际上是否有.NET 4.5.2?
2)有没有办法消除没有代码的警告?
3)还有其他我没想到的方法吗?
我正在使用SDK 2.8.1,OSVersion="*"。

我尝试使用OSFamily="4"。结果相同。 - Bill O
4个回答

8

.Net 4.5.2 是否在 Azure 上可用?

是的,.NET 4.5.2 可以在当前的 osVersion * 的 osFamily 2、3 和 4 上使用。

有没有一种方法可以禁止没有代码的警告?

升级到 Azure SDK 2.9 的云服务项目不再生成此警告。即使安装了版本2.9,仍然使用先前版本的 SDK 的项目会生成此警告。要抑制此警告,而不升级项目到 SDK 2.9,您可以将以下代码片段添加到 .ccproj 文件中:

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


2
根据此处提供的评论 - https://azure.microsoft.com/en-in/documentation/articles/cloud-services-dotnet-install-dotnet/,目前没有办法抑制此警告。

enter image description here

“Azure上是否实际可用.Net 4.5.2?”
“截至今天,是的。.Net 4.5.2在Azure上可用。事实上,我们几天前将我们的解决方案从.Net 4.5移植到了.Net 4.5.2。”
“为了使用.Net 4.5.2,您不能使用osVersion的“*”。您需要针对特定的操作系统版本。请参见此处的Guest OS/Target Framework版本矩阵: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>

我尝试了建议的OSFamily和OSVersion组合,但仍然收到了两个关于需要安装4.5.2的警告。 - Bill O
1
正如我在上面的回答中提到的,我认为你现在至少无法消除这个警告,因为并非所有的 osFamily/osVersion 组合都预装了 .Net 4.5.2。但是,如果您使用 osFamily = 4osVersion = WA-GUEST-OS-4.26_201511-02,则在部署时您的代码将能够正常工作。对于我们的产品,我们将 osVersion = * 留下,当运行应用程序时出现了错误。 - Gaurav Mantri
尽管没有内置的方法来抑制它,但是您可以像我一样做以抑制它 - BrainSlugs83

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 文件并对其进行了检查。——我发现没有内置的方法可以抑制它。

然而,你可以使用一个 hack —— 我基本上将那个块从 .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 />标签里面。)


-1

您需要在Web角色虚拟机上安装.NET 4.5.2。

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

对于Web角色

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

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%

```

您可以在此处获得完整的详细过程:

在云服务角色上安装 .NET

我认为在 Azure 完全支持 .net 4.5.2 之前,您应该实施此解决方法,也许它还不受您所在地区支持。请尝试创建一个新的云实例在 EastUS 进行测试是否已经支持 net fx 4.5.2。

现在,由于某些osFamily/osVersions的组合支持.Net 4.5.2,您实际上不需要执行所有这些步骤。 - Gaurav Mantri
我知道我可以显式安装它,但由于微软已经宣布将强制进行4.5.2的就地升级(或已经完成),所以我认为在升级操作时它将作为目标可用。我也知道直到现在它还不是一个目标,但可以通过OSVersion显式请求,而无需进行安装。这两个事实结合起来让我觉得我做错了其他事情。(感谢格式化;看起来好多了) - Bill O
你没有做错任何事情。你正在使用的当前操作系统家族/版本不支持 .net 4.5.2。如果你无法升级主机版本,支持此框架所需的步骤是在服务器上安装它。 - JuanK
@GauravMantri 我不知道Bill当前可用的主机操作系统版本。如果他可以在所有实例中无问题地迁移操作系统版本,那么解决方案显然就是迁移它们。 - JuanK
在帖子中添加:我认为你应该实现上述解决方法,直到Azure完全支持.net 4.5.2。在您的地区,可能尚未支持.net fx 4.5.2,请尝试创建一个新的云实例在东部美国测试是否已经支持。 - JuanK
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接