【问题标题】:The reference assemblies for framework “.NETFramework,Version=v4.5.1” were not found in RHPL在 RHPL 中找不到框架“.NETFramework,Version=v4.5.1”的参考程序集
【发布时间】:2017-12-11 15:49:03
【问题描述】:

我们在 RHPL 版本 7 中安装了dotnet sdk。当我们尝试构建我们的项目时,我们遇到了一些构建错误。我在 Linux 上的 dotnet 版本是 1.0.4。我们遇到这样的错误

    error MSB3644: The reference assemblies for framework ".NETFramework,Version=v4.5.1" were not found. To resolve this, install the SDK or Targeting Pack for this framework version or retarget your application to a version of the framework for which you have the SDK or Targeting Pack installed.
Note that assemblies will be resolved from the Global Assembly Cache (GAC) and will be used in place of reference assemblies. Therefore your assembly may not be correctly targeted for the framework you intend. 

【问题讨论】:

  • 您的项目是否针对 .Net Framework 4.5.1 而不是 .Net Core?

标签: .net linux .net-core


【解决方案1】:

您的项目针对 .net 4.5.1,在 csproj 中应该有类似这样的内容

<TargetFramework>net451</TargetFramework>

该行将针对无法在 linux 上编译的基于 Windows 桌面的 .net。

您需要将项目目标设为netstandardnetcoreapp,具体取决于您的用例。

如果您有一个TargetFrameworks 属性(注意末尾的s),并带有分号分隔的框架列表,那么它可能是多目标的。您可能会调用dotnet build /p:TargetFramework=<FrameworkHere>,其中框架位于框架列表中,并且以 netstandard 或 netcoreapp 开头。

您将无法在 linux 上编译 netX 代码,只能编译 netstandardnetcoreapp 和其他一些不起眼的名字。

【讨论】:

    【解决方案2】:

    要面向 .NET 框架(相对于标准/核心),您需要至少安装部分 Mono。 最简单的方法是简单地安装所有单声道(推荐版本 5 或更高版本)并使用其 msbuild 而不是 dotnet build。

    在某些时候,dotnet SDK 应该能够自动查找和使用 Mono 引用程序集(cfr.https://github.com/dotnet/sdk/issues/335);那么你只需要那些,而不是完整的 Mono 环境。

    就目前而言,如果您安装了 Mono 引用程序集(可能在/usr/lib/mono/4.5.1-api 之类的位置),您应该能够执行dotnet build /p:FrameworkPathOverride=/usr/lib/mono/4.5.1-api 之类的操作。 如果你是多目标,你可以在你的项目中设置一个<PropertyGroup>来适当地设置FrameworkPathOverride

    例如:

    <PropertyGroup Condition="'$(MonoReferenceAssemblies)' != ''">
      <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net20'">
        $(MonoReferenceAssemblies)/2.0-api
      </FrameworkPathOverride>
      <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net35'">
        $(MonoReferenceAssemblies)/3.5-api
      </FrameworkPathOverride>
      <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net40'">
        $(MonoReferenceAssemblies)/4.0-api
      </FrameworkPathOverride>
      <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net45'">
        $(MonoReferenceAssemblies)/4.5-api
      </FrameworkPathOverride>
      <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net451'">
        $(MonoReferenceAssemblies)/4.5.1-api
      </FrameworkPathOverride>
      <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net452'">
        $(MonoReferenceAssemblies)/4.5.2-api
      </FrameworkPathOverride>
      <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net46'">
        $(MonoReferenceAssemblies)/4.6-api
      </FrameworkPathOverride>
      <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net461'">
        $(MonoReferenceAssemblies)/4.6.1-api
      </FrameworkPathOverride>
      <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net462'">
        $(MonoReferenceAssemblies)/4.6.2-api
      </FrameworkPathOverride>
      <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net47'">
        $(MonoReferenceAssemblies)/4.7-api
      </FrameworkPathOverride>
      <FrameworkPathOverride Condition="'$(TargetFramework)' == 'net471'">
        $(MonoReferenceAssemblies)/4.7.1-api
      </FrameworkPathOverride>
    </PropertyGroup>
    

    这样,无论目标框架版本如何,dotnet build /p:MonoReferenceAssemblies=/usr/lib/mono 都可以工作(只要安装了相关的参考程序集)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-07
      • 2022-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多