我使用 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(或将其替换为另一个节点),以便它仅针对特定框架?
我有一个针对.NET 3.5的类库.现在,我想添加一些需要.NET 4.0的功能,但我仍然希望能够生成一个针对.NET 3.5的版本(当然没有这些功能).
理想情况下,我想根据配置定位不同的框架版本:
不幸的是,它似乎不可能,因为目标框架对整个项目来说是全球性的......
有办法解决吗?我知道我可以创建一个包含相同文件的第二个项目,但它对于可维护性来说非常糟糕....
最简单的方法是什么?如果你做过类似的事情,哪种方法效果最好?
当我尝试构建一个针对许多框架(包括“.net 6.0”和/或 netstandardX.X Visual Studio 2017)的项目时。即使在安装了 .NET 6.0 后,该主题的错误仍然发生,其中包括:
(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
有没有办法一举改变解决方案的所有项目的目标框架?改变18个项目的目标有点单调乏味.
我有许多针对.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的目标,我是否会遇到问题?
在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程序集,则警告会消失我能够编译.
问题: …
我有很多项目的解决方案。一些目标框架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”命令。
与Visual Studio有什么关系?
我尝试导入缓存应用程序块并收到此消息:
您尝试导入的程序集或其依赖项之一需要更高版本的.NET Framework.
我在Visual Studio中找到了我的应用程序的属性,但是我找不到要切换的下拉列表...这是什么交易?
我理解这是一个非常普遍的问题,但我无法找到解决以下场景的可靠资源,也不是在一个地方.所以我决定在这里问一下希望能帮助其他人解决同样的问题:
作为.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文件用于相同的"产品",但随着开发的进展,支持多个项目可能会变得乏味,即使现在目标框架数量非常重要.
我已经安装了 x64 和 x86 的 .NET 5 SDK,并将 Visual Studio 更新到最新版本。多次重新启动计算机和visual studio,它允许我的唯一选项是.NET Framework 4.8 版本。
.NET 5 也不会出现在new projectVisual Studio的窗口中。
如何让 .NET 5 出现以便我可以更新我的项目?
我希望能够以Windows窗体或wpf项目为目标显示.NET框架的版本,并将其显示在应用程序的标题栏中.
有没有办法可以做到这一点?
谢谢
最近升级了一个开源项目的旧版本。新的项目文件是较新的 SDK 项目类型,我遇到的问题应该是非常简单的。
构建旧项目时,输出文件被直接复制到我在项目属性、构建选项卡、“输出路径”字段中指定的文件夹中。我根据配置将其指定为 bin\x64\Debug 或 bin\x64\Release。
然而,使用这种新的项目格式,实际的 DLL 会输出到 bin\x64\Debug\net461 中。如果我更改目标框架,输出文件将位于不同的位置。例如 bin\x64\Debug\net462。
我需要它永远不会复制到框架子目录。它彻底搞砸了我们使用的 nmake 构建脚本。我该如何解决?
更重要的是,构建目录充满了从天知道从哪里复制的无用的依赖DLL。除了输出之外,我不需要输出目录中的任何内容。
我该如何让这个新的项目格式像旧的一样工作?
我创建了一个新的VB.NET Windows窗体应用程序.
在VS2010中,我单击项目设置,我看到常规选项卡"应用程序","构建","构建事件"等.
但是在"应用程序"选项卡下,没有像以下镜头中那样名为"目标框架"的选项:
根本不适合我.而是在该位置显示"应用程序类型"选项.
我究竟做错了什么?
target-framework ×13
.net ×5
c# ×4
.net-5 ×1
.net-6.0 ×1
.net-core ×1
dotnet-cli ×1
msbuild ×1
reference ×1
vb.net ×1