标签: target-framework

多个目标框架项目:不同框架上同一 NuGet 包的不同版本?

我使用 EntityFramework 5.0.13 组合了一个 .Net 5 for Windows 应用程序。

现在我们尝试在尚未安装 .Net 5 框架的特定服务器上运行它。管理服务器的好人告诉我,他们尝试安装新东西,但似乎无法使应用程序运行。可能需要重新启动服务器,但暂时无法完成。

所以我需要为我的应用程序使用较旧的目标框架。很好,所以我决定针对多个框架,同时添加 .Net Framework 4.8。在我的 .csproj 文件中,这相当于替换

    <TargetFramework>net5.0-windows</TargetFramework>
Run Code Online (Sandbox Code Playgroud)

    <TargetFrameworks>net5.0-windows;net48</TargetFrameworks>
Run Code Online (Sandbox Code Playgroud)

这应该可以解决问题。

不幸的是,EntityFramework 5.0.13 与 .Net Framework 4.8 不兼容。

所以我使用了旧版本 3.1.9(在我们的另一个项目上运行良好)。

需要一点说服力,但现在我的项目使用 3.1.9。(我相信,一旦我降级一些语句,它就会建立得很好Class variable = new();if (variable is not null)

现在,我想知道的是,我可以让我的 .Net 5 目标框架再次使用 EntityFramework 5.0.13 而不是 3.1.9 吗?

现在,我的 .csproj 文件读取

    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.9" />
Run Code Online (Sandbox Code Playgroud)

在我开始使用多个目标框架之前,这是

    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.13" />
Run Code Online (Sandbox Code Playgroud)

有没有办法添加属性PackageReference(或将其替换为另一个节点),以便它仅针对特定框架?

c# visual-studio target-framework nuget-package

6
推荐指数
1
解决办法
6764
查看次数

如何在同一项目的不同配置中定位不同的框架版本?

我有一个针对.NET 3.5的类库.现在,我想添加一些需要.NET 4.0的功能,但我仍然希望能够生成一个针对.NET 3.5的版本(当然没有这些功能).

理想情况下,我想根据配置定位不同的框架版本:

  • Debug,Release => .NET 3.5
  • Debug 4.0,Release 4.0 => .NET 4.0

不幸的是,它似乎不可能,因为目标框架对整个项目来说是全球性的......

有办法解决吗?我知道我可以创建一个包含相同文件的第二个项目,但它对于可维护性来说非常糟糕....

最简单的方法是什么?如果你做过类似的事情,哪种方法效果最好?

.net visual-studio-2010 target-framework

5
推荐指数
1
解决办法
1876
查看次数

错误 MSB3644 在 Visual Studio 2017 v15.9.51 上找不到框架“.NETFramework,版本=v6.0”的参考程序集

当我尝试构建一个针对许多框架(包括“.net 6.0”和/或 netstandardX.X Visual Studio 2017)的项目时。即使在安装了 .NET 6.0 后,该主题的错误仍然发生,其中包括:

  • .NET 运行时 6.xx
  • ASP.NET Core 运行时 6.xx
  • .NET 桌面运行时 6.xx

(x 取决于版本)

此外,解决方案资源管理器的依赖项显示错误(参见屏幕截图)

在此输入图像描述

我安装的sdk与“global.json”文件内容兼容:

{
    "sdk": {
        "version": "6.0.401",
        "allowPrerelease": false,
        "rollForward": "feature"
    }
}
Run Code Online (Sandbox Code Playgroud)

整个错误消息:

严重性代码 说明 项目文件行抑制状态错误 MSB3644 找不到框架“.NETFramework,Version=v6.0”的参考程序集。要解决此问题,请安装此框架版本的 SDK 或 Targeting Pack,或者将您的应用程序重新定位到已安装 SDK 或 Targeting Pack 的框架版本。请注意,程序集将从全局程序集缓存 (GAC) 中解析,并将用于代替引用程序集。因此,您的程序集可能无法正确定位您想要的框架。

但此消息也适用于所有丢失或无法识别的依赖项。

.csproj 文件(目标框架):

<Project Sdk="Microsoft.NET.Sdk">
    
  <PropertyGroup>
    <TargetFrameworks>netstandard2.1;netstandard2.0;net45;net48;netstandard1.5;net40;net35;net20;net6.0</TargetFrameworks>
  </PropertyGroup

  <PropertyGroup Condition="'$(TargetFramework)' == 'net20' ">
    <DefineConstants>$(DefineConstants);LEGACY</DefineConstants>
  </PropertyGroup>

  <PropertyGroup Condition="'$(TargetFramework)' == 'net35' ">
    <DefineConstants>$(DefineConstants);LEGACY</DefineConstants>
  </PropertyGroup>

  <PropertyGroup Condition="'$(TargetFramework)' == 'net40' ">
    <DefineConstants>$(DefineConstants);LEGACY</DefineConstants>
  </PropertyGroup> …
Run Code Online (Sandbox Code Playgroud)

target-framework visual-studio-2017 .net-standard-2.0 .net-standard-2.1 .net-6.0

5
推荐指数
1
解决办法
1万
查看次数

在VS.NET 2010中切换目标框架

有没有办法一举改变解决方案的所有项目的目标框架?改变18个项目的目标有点单调乏味.

visual-studio-2010 target-framework

4
推荐指数
2
解决办法
4898
查看次数

我可以使用Visual Studio 2010而不是升级到.NET Framework 4.0吗?

我有许多针对.NET Framework 3.5的Visual Studio 2008 Web项目.我想开始使用Visual Studio 2010,但是.NET Framework 4.0还没有得到网络托管公司的很好支持.暂时坚持使用.NET Framework 3.5似乎是有道理的.如果我在Visual Studio 2010中打开我的项目并将它们作为.NET Framework 3.5的目标,我是否会遇到问题?

.net visual-studio-2010 target-framework

4
推荐指数
1
解决办法
391
查看次数

为什么带参考汇编的VS2012项目无法自动定位4.0

在Visual Studio 2012 C#控制台应用程序中,我将".NET Framework Target"从4.5降级到4.0.安装了两个框架的Win 7 Pro.

然后我引用一个程序集,通过警告抱怨以下内容:

The primary reference "System.Threading.Tasks.Dataflow, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" could not be resolved because it has an indirect dependency on the framework assembly "System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which could not be resolved in the currently targeted framework. ".NETFramework,Version=v4.0". To resolve this problem, either remove the reference "System.Threading.Tasks.Dataflow, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" or retarget your application to a framework version which contains "System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".

如果我在这一点上尝试编译,我会出错,因为引用程序集中的类型和命名空间不可用,就好像根本没有引用程序集一样.

"添加引用"对话框没有任何 System.Runtime选项,但如果我手动选择C:\ Windows\Microsoft.NET\Framework\v4.0.30319 \并引用那里找到的System.Runtime程序集,则警告会消失我能够编译.

问题: …

reference target-framework visual-studio-2012

4
推荐指数
1
解决办法
5237
查看次数

具有多个目标框架的项目的 dotnet 发布 sln 失败

我有很多项目的解决方案。一些目标框架netcoreapp2.1,一些其他目标框架netstandard2.0,一个项目有双目标框架

<TargetFrameworks>netstandard2.0;net471</TargetFrameworks>
Run Code Online (Sandbox Code Playgroud)

我想要一个用于 win10 的神器,只需一个命令:

dotnet publish MySolution.sln -c Release -o "targetFolder" -r win10-x64
Run Code Online (Sandbox Code Playgroud)

使用此命令,我在使用双目标框架构建项目时遇到此错误。这是错误:

C:\Program Files\dotnet\sdk\2.1.402\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.CrossTargeting.targets(31,5) error : The 'Publish' target is not supported without specifying a target framework. The current project targets multiple frameworks, please specify the framework for the published application.
Run Code Online (Sandbox Code Playgroud)

错误很明显。最后我发现 dll 在输出目录中编译,看起来它是一个 netstandard2.0 dll,因为我的应用程序仍然可以工作。

我不喜欢肮脏的东西,那么我该如何解决我的问题呢?

如果可能的话,我会避免调用 N 次“dotnetpublish”命令。

target-framework .net-core dotnet-cli

4
推荐指数
1
解决办法
8074
查看次数

在Visual Studio 2008中更改目标框架

与Visual Studio有什么关系?

我尝试导入缓存应用程序块并收到此消息:

您尝试导入的程序集或其依赖项之一需要更高版本的.NET Framework.

我在Visual Studio中找到了我的应用程序的属性,但是我找不到要切换的下拉列表...这是什么交易?

.net visual-studio target-framework

3
推荐指数
2
解决办法
2万
查看次数

是否有任何可靠(甚至标准化)的方法来创建同时支持多个目标框架的.NET库?

我理解这是一个非常普遍的问题,但我无法找到解决以下场景的可靠资源,也不是在一个地方.所以我决定在这里问一下希望能帮助其他人解决同样的问题:

作为.NET组件的开发人员,我想支持各种.NET目标框架.这个主题对我来说非常重要,因为当引入点网核点网标准时,最近爆炸的目标框架变体.

所以,想象一下我正在编写一个C#库MyLib(我称之为"产品"),它编译成了MyLib.dll.我想支持不同范围的目标框架:net35,net40,net45,netstandard1.2对于每一个目标框架和等,因此我创建构建(或的MSBuild的csproj文件),并在单个NuGet包一起捆扎在一起,尊重的NuGet准则lib文件夹结构.因此,该产品可以从单个构造工件 - nuget包获得.

对于每个目标框架版本,我尝试利用其功能和优点,并为较低版本提供pollyfill或删除某些功能.一般来说,无论消费项目的目标框架如何,"产品"都是可用的 - 我的意思是MyLib应该正确安装nuget包,并且应该引用适当的dll.

因此,出现了一些问题:

  • 跨不同版本共享相同的程序集版本信息是否正确?喜欢重用同一个AssemblyInfo.cs文件?
  • 不应在我的构建之间共享哪些程序集属性?我已经开始了关于]属性的另一个线程[assembly: Guid("...")].其他人都显示关注的的[assembly: AssemblyTitle("...")]属性为好,而在不同的上下文.
  • 是否有任何良好或标准化的方法来组织解决方案以支持上述构建结果.那里的大多数项目真的都在为实现这个目标而自生自灭吗?

到目前为止,我自己的方法是为每个目标框架使用一个单独的.csproj文件用于相同的"产品",但随着开发的进展,支持多个项目可能会变得乏味,即使现在目标框架数量非常重要.

c# projects-and-solutions target-framework nuget-package

3
推荐指数
1
解决办法
189
查看次数

无法将项目更新到 .NET 5

我已经安装了 x64 和 x86 的 .NET 5 SDK,并将 Visual Studio 更新到最新版本。多次重新启动计算机和visual studio,它允许我的唯一选项是.NET Framework 4.8 版本。

.NET 5 也不会出现在new projectVisual Studio的窗口中。

如何让 .NET 5 出现以便我可以更新我的项目?

目标框架下拉列表未显示 .NET 5。

Visual Studio 是最新消息。

.net c# target-framework .net-5

3
推荐指数
1
解决办法
2927
查看次数

我可以以编程方式确定目标.NET框架版本吗?

我希望能够以Windows窗体或wpf项目为目标显示.NET框架的版本,并将其显示在应用程序的标题栏中.

有没有办法可以做到这一点?

谢谢

.net target-framework

2
推荐指数
1
解决办法
1189
查看次数

新的 Microsoft.NET.Sdk 项目在子目录中构建输出文件。怎么改回来呢?

最近升级了一个开源项目的旧版本。新的项目文件是较新的 SDK 项目类型,我遇到的问题应该是非常简单的。

构建旧项目时,输出文件被直接复制到我在项目属性、构建选项卡、“输出路径”字段中指定的文件夹中。我根据配置将其指定为 bin\x64\Debug 或 bin\x64\Release。

然而,使用这种新的项目格式,实际的 DLL 会输出到 bin\x64\Debug\net461 中。如果我更改目标框架,输出文件将位于不同的位置。例如 bin\x64\Debug\net462。

我需要它永远不会复制到框架子目录。它彻底搞砸了我们使用的 nmake 构建脚本。我该如何解决?

更重要的是,构建目录充满了从天知道从哪里复制的无用的依赖DLL。除了输出之外,我不需要输出目录中的任何内容。

我该如何让这个新的项目格式像旧的一样工作?

c# msbuild visual-studio target-framework

2
推荐指数
1
解决办法
923
查看次数

在VS2010 VB Project中找不到"目标框架"选项

我创建了一个新的VB.NET Windows窗体应用程序.

在VS2010中,我单击项目设置,我看到常规选项卡"应用程序","构建","构建事件"等.

但是在"应用程序"选项卡下,没有像以下镜头中那样名为"目标框架"的选项:

在此输入图像描述

根本不适合我.而是在该位置显示"应用程序类型"选项.

我究竟做错了什么?

vb.net visual-studio-2010 target-framework

1
推荐指数
1
解决办法
4669
查看次数