如何在 mvc 中创建具有多版本支持的解决方案
Posted
技术标签:
【中文标题】如何在 mvc 中创建具有多版本支持的解决方案【英文标题】:How to create solution with multiple version support in 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。
【问题讨论】:
【参考方案1】:您需要在项目中定位多个框架;
-
右键单击项目名称,然后单击“编辑 .cproj 文件”
将 (s) 添加到目标框架标签,使其变为
<TargetFrameworks>...</TargetFrameworks>
-
指定您的目标框架(所有版本请参见docs):
<TargetFrameworks>net472;net48;netcoreapp2.0;netcoreapp2.1;netcoreapp2.2</TargetFrameworks>
-
如果您的库有任何引用,您需要手动指定每个版本的所有引用:
<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
-
最后但并非最不重要的;在您的代码中,您需要检查目标框架的特定情况,您需要在每个版本中使用兼容的代码行。
例如,要获取文化信息,您需要为不同的 .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,您将看到所有目标框架的下拉导航,您可以使用它在目标框架之间切换并检查您的代码兼容性。
【讨论】:
我已经尝试过您提到的建议。但没有运气。我已将代码更新如下以上是关于如何在 mvc 中创建具有多版本支持的解决方案的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Intellij IDEA 13.1 中创建具有 Maven 结构的 Spring MVC 应用程序?
从 ASP.NET MVC 迁移到 ASP.NET Core MVC