我的大部分项目一直使用 .NET Core 3.1,但目前有一个现有项目使用 .NET Framework 4.6.1
我在实现对 .NET Framework 4.6.1 的依赖注入时遇到困难,不确定我哪里做错了。
这是我到目前为止的理解和所做的:
这就是 .NET Core 3.1 中添加依赖注入的方式
启动.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
RegisterServices(services);
ServiceProvider = services.BuildServiceProvider();
}
private void RegisterServices(IServiceCollection services)
{
services.AddOptions();
services.AddTransient<IMemberServices, MemberService>();
}
Run Code Online (Sandbox Code Playgroud)
如何在 .NET Framework 4.6.1 中添加 IMemberServices 与 MemberService 的依赖关系
全局.asax.cs
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
//What to write here?
}
}
Run Code Online (Sandbox Code Playgroud) c# dependency-injection .net-framework-version .net-core asp.net-core
##[错误]C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(1217,5):错误 MSB3644:.NETFramework 的参考程序集,版本= v4.5 未找到。要解决此问题,请安装此框架版本的开发人员包(SDK/目标包)或重新定位您的应用程序。您可以在以下位置下载 .NET Framework 开发人员包:
msbuild .net-framework-version azure-devops windows-server-2019 visual-studio-2022
我使用的是 Visual Studio 2019。当我更改项目的 .NET Framework 版本(升级或降级)时,Visual Studio 会自动在文件的 XML 中创建以下内容csproj:
<TargetFrameworkProfile />
Run Code Online (Sandbox Code Playgroud)
这是什么意思?它有什么作用吗?如果我删除它,据我所知,该项目仍然运行良好。为什么 Visual Studio 会创建这个?
注意这段代码,在.net Framework 4.6中运行时,只能得到“按任意键。”,但可以得到“配置已更改”。在.net 5.0中,为什么?
public class Holder
{
public static int IntVal = 0;
public static DateTime DateTimeVal;
}
public class StaticDateTime
{
private static DateTime config = DateTime.Now;
public StaticDateTime()
{
}
public void configChanged()
{
DateTime d = Holder.DateTimeVal;
if (d.Ticks == 0)
{
Holder.DateTimeVal = DateTime.Now;
return;
}
if (d < config)
{
Console.WriteLine("config changed.");
}
}
}
class Program
{
static void Main(string[] args)
{
StaticDateTime sd = new StaticDateTime();
sd.configChanged();
System.Threading.Thread.Sleep(1500);
StaticDateTime sd2 = new …Run Code Online (Sandbox Code Playgroud) 我在VS2010中使用4.0框架创建了一个DLL(是的,它是完整的4.0,而不是客户端配置文件).我想在VS2008项目中引用它(这意味着我无法将引用项目重新定位到4.0,即使我想要)并且将该项目升级到VS2010也不是一个选项.
我理解为什么在3.5个项目中引用4.0'项目'存在问题,但我不明白为什么我在3.5项目中引用4.0 dll时会遇到问题.而且据我所知,这可能不是问题,但我似乎无法想到它还能是什么.
我正在尝试使用Fasterflect(http://fasterflect.codeplex.com/),它在很大程度上依赖于我的3.5项目中的4.0功能(同样,我的公司还没有准备好为VS2010省钱,所以我无法改变那).一开始似乎一切正常,直到我尝试编译然后关于Fasterflect程序集的错误没有被弹出的错误.所以我下载了实际的源代码,签名,重新编译它,并引用了我新签名的程序集.问题是现在它显示警告符号并说:
已解决的文件具有错误的图像,没有元数据,或者无法访问.无法加载文件或程序集"C:....\Fasterflect.dll"或其依赖项之一.此程序集由比当前加载的运行时更新的运行时构建,无法加载.
我尝试按照这里建议的答案:http://social.msdn.microsoft.com/Forums/en/clr/thread/36b1a209-55d5-4323-91dc-0919ba2e1d03.但是,当我这样做时,我收到另一条错误消息:
找不到元素'supportedRuntime'的架构信息.C:....\DynamicSql\App.config中
我似乎无法想出这个错误.
当然有一些方法让我在VS2008中使用这个DLL?
我一直在更新 .NET Framework 目标版本的项目,更新到最新的 .NET (4.6.2)。
其中一些项目是在 TeamCity 9.0.2 中构建的 NuGet 包。
我已经使用本指南中的步骤为不同的 .NET Framework 版本创建多个构建配置,因为我尚未更新到 4.6.2 的一些项目引用了 NuGet 包。所以我试图让 TeamCity 使用这些构建配置来输出各种 Net40、Net45、Net46 和 Net462 版本,这样我就可以完全兼容,而无需在更新包时强制升级所有使用 NuGet 的项目。
我真的不知道如何在 TeamCity 中做到这一点。我相当确定这应该在“构建步骤”配置中完成,但到目前为止我还没有设法让它工作。
这么一件事我已经试过,我想我需要做的,但我不知道是重复第一生成步骤和设置Configuration来Release-Net46。我认为这是必要的,否则将无法构建此版本的程序集(如果我错了,请纠正我!)
我尝试的第二件事是复制NuGet Pack步骤和Properties集合,Configuration=Release-Net46但所做的只是用 Net46 替换 Net462 版本,而不是像我希望的那样将两者都包含在工件中。
我还尝试在PropertiesofNuGet Pack中拥有多个Configuration元素,例如Configuration=Release;Configuration=Release-Net46or ,Configuration=Release,Release-Net46但这两个元素都导致构建完全失败,这显然不是答案。
我认为必须有一种方法可以让这个NuGet Pack构建步骤从其他构建配置中获取输出并将程序集的所有可用版本输出到工件。
那可能吗?我曾考虑过为 TeamCity 中的每个构建配置创建单独的项目,但我不确定这是正确的方法还是会导致包源出现问题,并且为每个 .NET Framework 版本复制项目四次似乎不整洁.
我试图在vs 2017中添加nuget包prism.core并且目标框架是4.6.1,它给出了这个错误
严重级代码说明项目文件行抑制状态错误无法添加对"Microsoft.Practices.ServiceLocation"的引用.图书馆未注册.(HRESULT的例外情况:0x8002801D(TYPE_E_LIBNOTREGISTERED)
试图安装newtonsoft.json包,得到了这个错误
严重级代码说明项目文件行抑制状态错误无法添加对"Newtonsoft.Json"的引用.图书馆未注册.(HRESULT的例外情况:0x8002801D(TYPE_E_LIBNOTREGISTERED))0
无法安装任何nuget包?这与vs 2017有什么关系?
.net c# .net-framework-version nuget-package visual-studio-2017
在.NET Standard项目中,有一种方法可以确定DLL是在.NET Core中运行还是在运行时运行常规.NET Framework?
我想为不同的.NET平台处理不同的事情.
我正在尝试创建一个 .net 标准 2.0 库,该库使用 PowerShell 类 (System.Management.Automation) 调用 PowerShell 命令和脚本。我想在 .Net Framework (4.7.2) 项目中使用这个 .Net Standard 库。
使用我已经尝试过Microsoft.PowerShell.SDK,并System.Management.Automation在.net标准项目NuGet包,但我不断收到此错误:
System.IO.FileLoadException
HResult=0x80131040
Message=Could not load file or assembly'System.Management.Automation, Version=6.1.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
Run Code Online (Sandbox Code Playgroud)
.Net Standard 2.0 库项目中的示例代码:
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
PowerShell posh = PowerShell.Create();
posh.Runspace = runspace;
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?任何帮助表示赞赏。
c# ×6
.net ×4
.net-core ×3
asp.net-core ×2
.net-5 ×1
azure-devops ×1
dll ×1
msbuild ×1
nuget ×1
powershell ×1
teamcity ×1
teamcity-9.0 ×1