我的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 =“*”。
答案 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/,我们无法取消此警告。
.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
对于网络角色
<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>
<强> 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%
```
您可以在此处获取完整的详细程序:
我认为您应该实施此解决方法,直到您的区域尚不支持Azure完全支持.net 4.5.2。尝试在EastUS中创建新的云实例以测试是否已支持net fx 4.5.2。 / p>