具有 .NET Standard 目标的 Azure 云服务经典

Posted

技术标签:

【中文标题】具有 .NET Standard 目标的 Azure 云服务经典【英文标题】:Azure Cloud Service Classic with .NET Standard target 【发布时间】:2017-11-07 14:57:22 【问题描述】:

有没有办法使用面向 .netstandard2.0 的辅助角色运行 Azure 云服务经典项目?

我有这样的项目,但每当我尝试构建它时,我都会收到此错误:

严重性代码描述项目文件行抑制状态 错误项目 'C:\path\to\project\src\Frontend\Frontend.csproj' 针对“.NETStandard,Version=v2.0”。它不能被 以项目为目标 '.NETFramework,版本 = v4.0'。用户发现服务 C:\Program Files\dotnet\sdk\2.0.2\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Sdk.Common.targets 87

我尝试在 ccproj 中设置目标框架,但没有帮助。

【问题讨论】:

您是否尝试过按照此处的步骤操作:github.com/dotnet/sdk/issues/1241 此构建也是在您的本地计算机或 VSTS 上运行 谢谢@ObiEff,但这似乎与我的问题无关。我从云服务项目中引用 .netstandard 项目时遇到问题。 github上的帖子是关于从netcoreapp2.0引用的。 【参考方案1】:

以防万一其他人遇到此错误,我通过将此行添加到云服务 .ccproj 文件的 Project/PropertyGroup 部分来解决此错误: <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>

例如

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>2.9</ProductVersion>
    <ProjectGuid>8c99xxxx-xxxx-xxxx-xxxx-xxxxxxxx273e</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>MyCloudService</RootNamespace>
    <AssemblyName>MyCloudService</AssemblyName>
    <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion> <!-- Added -->
    <StartDevelopmentStorage>True</StartDevelopmentStorage>
    <Name>CloudSheetCloudService</Name>
    etc...

默认情况下,云服务项目不指定框架(它不需要),但 MSBuild 中的某些东西似乎在云服务和 web / worker 角色之间进行版本检查,然后构建失败。

更改工具版本没有帮助。

作为背景 - 我有一个旧的云服务,它引用了一个使用新 csproj 样式的 4.6.2 项目,如下所示:

<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <TargetFramework>net462</TargetFramework>
   </PropertyGroup>
</Project>

HTH。 标记。

编辑:要编辑的文件是 .ccproj,而不是前面所述的 .cproj 文件。

【讨论】:

非常有用的信息,谢谢。我认为是 .ccproj 而不是 .csproj 需要额外的行 - 我已经进行了等待审核的编辑。【参考方案2】:

严重性代码描述项目文件行抑制状态错误项目“C:\path\to\project\src\Frontend\Frontend.csproj”针对“.NETStandard,Version=v2.0”。以“.NETFramework,Version=v4.0”为目标的项目不能引用它。

根据错误,您的 Frontend.csproj 项目以 .NETStandard 2.0 为目标,并且您从一个以 .NETFramework V4.0 为目标的项目引用了 .NETStandard 2.0 项目。作为关于.NET Standard 的官方文档,您至少需要使您的项目以.NETFramework V4.6.1 为目标,以引用.NETStandard 2.0 项目或库。或者您需要选择较低的 .NET Standard 版本,更多详情需要关注.NET implementation support。

【讨论】:

以上是关于具有 .NET Standard 目标的 Azure 云服务经典的主要内容,如果未能解决你的问题,请参考以下文章

.Net 45 来自 .Net Standard 2.0 dll 的序列化

无法在面向 .Net Standard 2.0 的项目中加载 Revit API

库是不是应该明确针对 .NET Core 3?

NET Platform Standard

.NET Standard

csharp .NET Standard如何与.NET平台相关