【问题标题】:How to create solution with multiple version support in mvc如何在 mvc 中创建具有多版本支持的解决方案
【发布时间】:2019-10-02 06:53:00
【问题描述】:

我正在 Asp.net MVC 4.7.1 最新版本中创建一个项目,并希望在其他项目中也将该解决方案作为类库 dll 重用。但我们使用此 dll 的其他项目不支持最新版本(4.6)。当我尝试在其他版本的解决方案中使用类库时,它会抛出以下错误。

(0): 错误 CS1705: 程序集 'ProjectName(dll name), Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 使用 'System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 的版本高于引用的程序集 'System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'

我需要创建一个支持多版本的解决方案,同时将其用作 dll。

【问题讨论】:

    标签: c# asp.net-mvc version class-library


    【解决方案1】:

    您需要在项目中定位多个框架;

    1. 右键单击项目名称,然后单击“编辑 .cproj 文件”
    2. 将 (s) 添加到目标框架标签,使其变为
    <TargetFrameworks>...</TargetFrameworks>
    
    1. 指定您的目标框架(所有版本请参见docs):
    <TargetFrameworks>net472;net48;netcoreapp2.0;netcoreapp2.1;netcoreapp2.2</TargetFrameworks>
    
    1. 如果您的库有任何引用,您需要手动指定每个版本的所有引用:
    <ItemGroup Condition=" '$(TargetFramework)' == 'net471' ">
      <Reference Include="System.Net" />
    </ItemGroup>
    

    或为多个版本指定参考:

    <ItemGroup Condition=" '$(TargetFramework)' == 'netcoreapp2.0' || '$(TargetFramework)' == 'netcoreapp2.1' || '$(TargetFramework)' == 'netcoreapp2.2' ">
      <PackageReference Include="Microsoft.AspNetCore.Mvc.TagHelpers" Version="1.0.0" />
    </ItemGroup>
    
    

    或为所有目标框架指定包引用:

    <ItemGroup>
      <PackageReference Include="Microsoft.AspNetCore.Localization" Version="1.0.0" />
    </ItemGroup>
    

    您可以指定所需的最低版本,框架将安装最新的兼容版本。例如下面我们将本地化包最小版本指定为 1.0.0,但是当它安装在 .Net Core 2.2 上时,它将安装最新的兼容版本,有关版本控制的更多详细信息,请参阅version ranges and wild chars

    1. 最后但并非最不重要的;在您的代码中,您需要检查目标框架的特定情况,您需要在每个版本中使用兼容的代码行。

    例如,要获取文化信息,您需要为不同的 .Net Core 版本指定不同的代码:

    #if NETCOREAPP1_0
        var culture = new CultureInfo("en-US");
    #else
        var culture = CultureInfo.GetCultureInfo("en-US");
    #endif
    
        _logger.LogInformation($"{culture.Name}");
    

    如果您使用的是 Visual Studio,您将看到所有目标框架的下拉导航,您可以使用它在目标框架之间切换并检查您的代码兼容性。

    【讨论】:

    • 我已经尝试过您提到的建议。但没有运气。我已将代码更新如下 Here我们已经提到了目标框架条件。我的场景是目标框架是 4.6,源 dll 是 4.7.1。我的目标在版本 5.2.3.0 中有 system.web.mvc 文件,而我试图将 4.6 框架项目的 system.web.mvc 引用为 5.2.4.0
    • 您可以在问题中添加您的 .csproj 文件吗?
    • 我不能所有的代码...这是一个大项目 False..\packages\Microsoft.AspNet.Mvc.5.2.3\lib\net45\System.Web.Mvc.dllTrue
    • 这样你就可以引用被引用的 MVC 的早期版本,see all available versions here
    猜你喜欢
    • 2013-09-07
    • 1970-01-01
    • 2017-12-04
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多