Tag: .net standard

如何在.NET Standard项目中“添加服务引用”

我想在.NET Standard项目中执行“添加服务引用”。(Visual Studio 2017) 我在NuGet上安装了“System.ServiceModel.Http”和“System.ServiceModel.Security”,以便使WCF访问成为可能。 但是,.NET Standard项目中没有“添加服务引用”菜单项。 如何添加服务引用? 它存在于.NET Framework项目中,但它在.NET Standard项目中不存在,因此遇到了麻烦。

‘无法加载文件或程序集’netstandard,Version = 2.0.0.0,…’。 不应加载引用程序集以执行

目标:从.NET 4.7控制台应用程序,使用Assembly.GetType()的reflection,我尝试从程序集X中提取netstandard 2.0类的类型。然后我想用Activator.CreateInstance()创建此类型的实例。 我想要做的是:但是,这个程序集X依赖于netstandard 2.0。 为了能够获取Type,必须将netstandard依赖项加载到AppDomain中。 这就是为什么当AppDomain通过AssemblyResolve事件请求netstandard程序集时,我只需加载这样的dll: var netStandardDllPath = @”C:\Users\xxx\.nuget\packages\NETStandard.Library.2.0.0-preview1-25301-01\build\netstandard2.0\ref\netstandard.dll”; return Assembly.LoadFrom(netStandardDllPath); 哪个投掷: System.BadImageFormatException:’无法加载文件或程序集’文件:/// C:\ Users \ vincent.lerouvillois.nuget \ packages \ NETStandard.Library.2.0.0-preview1-25301-01 \ build \ netstandard2.0 \ ref \ netstandard.dll’或其依赖项之一。 不应加载引用程序集以执行。 它们只能在Reflection-only loader上下文中加载。 (HRESULTexception:0x80131058)’ 内部exception:BadImageFormatException:无法加载引用程序集以执行。 我所知道的:我知道他们希望我们使用Assembly.ReflectionOnlyLoadFrom加载DLL。 但这样做会阻止我使用Activator.CreateInstance()实现类型。 请参阅Microsoft官方post 另外,我尝试在我的控制台应用程序中引用Nuget软件包NETStandard.Library 2.0.0-preview1-25301-01和NETStandard.Library.NETFramework 2.0.0-preview1-25305-02,这样它就会引用netstandard 2.0库,但是它没有改变任何东西。 问题:有没有人知道是否有正确的方法加载该DLL而没有错误,或者可能是否是一个bug,或者? 或者为什么这种DLL无法加载执行?

.net核心中的CPU使用率(至少在Windows上)

所以PerformanceCounter在dotnet核心中消失了。 我理解这是因为它不兼容Linux。 这里的评论:( .NET Core性能计数器的故事是什么? )似乎暗示如果我只愿意在Windows上运行它,我可以“利用Windows特有的function”,但我不知道我如何将其整合到dotnet核心中。 我愿意做这个解决方法的原因是保留dotnet核心代码库,这样一旦有针对PerformanceCounter的跨平台解决方案,我就不必迁移。 总结一下我的问题:如何在Windows上运行时运行dotnet核心的CPU使用率? 我发现的其他相关post: 这个解决方案似乎表明Process.GetCurrentProcess()就足够了,我不太明白( PerformanceCounter提供了该机器的完整CPU使用率)。 循环遍历所有进程(正如这个其他post似乎暗示的那样 ?)是不可行的(它为某些进程抛出exception)并且它看起来很慢也是我的用例的问题。

尝试使用.netstandard 2程序集时,Web Api 2运行时错误

我有一个Asp.net WebApi 2站点引用.net 4.6.1。 到目前为止,该网站引用了PCL程序集(便携式类库),与UWP和Xamarin兼容,没有任何问题。 现在我正按照建议将该PCL更改为NetStandard2.0程序集,但在站点启动时收到错误。 错误如下 – 找不到方法:’System.Collections.ObjectModel.Collection`1 System.Web.Http.HttpConfiguration.get_MessageHandlers()’。 有任何想法吗? 谢谢

更新程序包运行时限制PackageReference升级版本

在用于NuGet的.NET较旧的packages.config系统下, 我可以通过使用Package元素上的allowedVersions属性来约束在更新包时考虑的包的可能版本 当在Visual Studio中为包含上述项目的项目运行update-package ,不会对Newtonsoft.Json更新,因为我已使用allowedVersions属性固定到10.0.3。 如何在PackageReference下实现这一目标? 将Semver语法应用于Version属性仅影响已还原的版本 – 它不会限制更新。 因此,如果我指定下面的PackageReference并运行update-package ,我将例如升级到11.0.1,如果11.0.1在我的NuGet存储库中。 背景 我们依靠命令行工具来更新包,因为我们有快速移动的内部包(每天更新多次)和更稳定的低移动包(例如:ASP.NET)。 在大型代码库中, .csproj文件中手动更新每个依赖项对我们来说根本不可扩展(并且容易出错)。 在packages.config我们可以“固定”我们不想升级的第三方软件包,并且还可以更新到最新的快速移动依赖项。

net462应用程序引用netstandard1.5库时出现“无法加载文件或程序集”错误。 但为什么?

我试图弄清楚在这个示例项目中我可能做错了什么。 当我的net462应用程序引用netstandard1.5库时,我收到错误。 该应用程序依赖于”System.Collections.Immutable”: “1.3.0” ,它根据Nuget定位NetStandard 1.0。 该库依赖于”NETStandard.Library”: “1.6.0” 。 我设置这些项目中的任何一个都错了吗? 我非常感谢对此有任何见解…… 这是他们的project.json: 应用: { “buildOptions”: { “emitEntryPoint”: true }, “dependencies”: { “SomeLibrary”: “1.0.0-*” }, “frameworks”: { “net462”: { “dependencies”: { “System.Collections.Immutable”: “1.3.0” } } }, “version”: “1.0.0-*” } 图书馆 { “buildOptions”: { “allowUnsafe”: true }, “dependencies”: { }, “frameworks”: { “netstandard1.5”: { “dependencies”: { “NETStandard.Library”: […]

在dotnet核心中读取json文件时出错“已达到inotify实例数量的已配置用户限制(128)”

我有一个控制台应用程序(在网络核心1.1中),它每隔1分钟在cron调度程序中安排一次。 在应用程序内部有调用配置文件。 我附上下面的代码。 public static T GetAppConfig(string key, T defaultValue = default(T)) { T value = default(T); logger.Debug($”Reading App Config {key}”); try { var environmentName = Environment.GetEnvironmentVariable(“ASPNETCORE_ENVIRONMENT”); var builder = new ConfigurationBuilder() .AddJsonFile($”appsettings.json”, true, true) .AddJsonFile($”appsettings.{environmentName}.json”, true, true) .AddEnvironmentVariables(); var configuration = builder.Build(); T setting = (T)Convert.ChangeType(configuration[key], typeof(T)); value = setting; if (setting == null) […]

无法为netstandard1.x项目安装Netstandard1.x Nuget软件包

在完成全新的Windows 10安装以及最新的Visual Studio 2015,netcore和nuget工具之后 – 我无法再将Nuget软件包安装到任何.net标准项目中。 这是一些示例输出: Restoring packages for ‘ClassLibrary1’. Restoring packages for c:\users\zone1\documents\visual studio 2015\Projects\ClassLibrary1\ClassLibrary1\project.json… Package System.ComponentModel.EventBasedAsync 4.0.11 is not compatible with netstandard1.3 (.NETStandard,Version=v1.3). Package System.ComponentModel.EventBasedAsync 4.0.11 supports: – monoandroid10 (MonoAndroid,Version=v1.0) – monotouch10 (MonoTouch,Version=v1.0) – net45 (.NETFramework,Version=v4.5) – netcore50 (.NETCore,Version=v5.0) – netstandard1.0 (.NETStandard,Version=v1.0) – netstandard1.3 (.NETStandard,Version=v1.3) – portable-net45+win8+wp8+wpa81 (.NETPortable,Version=v0.0,Profile=Profile259) – win8 (Windows,Version=v8.0) – […]

.Net Standard中CompileToMethod的替代品

我现在正在移植一些使用表达式到.Net Core应用程序的库,并遇到了一个问题,我的所有逻辑都基于LambdaExpression.CompileToMethod ,它只是遗漏了。这是示例代码: public static MethodInfo CompileToInstanceMethod(this LambdaExpression expression, TypeBuilder tb, string methodName, MethodAttributes attributes) { … var method = tb.DefineMethod($”__StaticProxy”, MethodAttributes.Private | MethodAttributes.Static, proxy.ReturnType, paramTypes); expression.CompileToMethod(method); … } 是否有可能以某种方式重写它以使用表达式生成方法成为可能? 我已经可以用Emit做到这一点,但它非常复杂,我想避免它支持高级表达式。 我尝试使用var method = expression.Compile().GetMethodInfo(); 但在这种情况下,我收到一个错误: System.InvalidOperationException:无法从其他模块导入全局方法或字段。 我知道我可以手动发出IL,但我需要将Expression – >转换为绑定到特定TypeBuilder MethodInfo ,而不是在其上构建自己的DynamicMethod 。

在库和.Net framework 4.6.1中使用.Net Standard 1.4和应用程序时,无法加载文件System.IO.FileSystem,Version = 4.0.1.0

我有一个包含库和2个应用程序的解决方案。 这些应用程序代表相同的程序,其中一个程序是通过UAP10定位到Windows App Store,另一个是使用.Net Framework 4.6.1定位到Microsoft Windows PC。 我正在使用Visual Studio 2017。 我设置了库项目目标.Net标准1.4。 我将UWP应用程序设置为目标Windows 10 Aniversary Edition(10.0; Build 14393),最低版本Windows 10(10.0; Build 10586)。 我将通用Windows应用程序设置为目标.Net Framework 4.6.1。 UWP版本编译并运行良好。 最初,.Net Framework 4.6.1编译并运行。 但是,当我从System.IO调用File.Open时,我收到以下错误消息: System.IO.FileNotFoundException:’无法加载文件或程序集’System.IO.FileSystem,Version = 4.0.1.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a’或其依赖项之一。 该系统找不到指定的文件。’ File.Run的代码块在库代码(.Net Standard 1.4)中。 我不确定是什么导致了这个问题。 我认为我可以在引用.Net Framework 4.6.1的应用程序中使用.Net Standard 1.4库。 作为一种解决方法,我尝试在.Net Framework应用程序中安装System.IO的Nuget包。 System.IO版本4.0.1.0甚至不是一个选项。 有一个版本4.0.10,但安装此Nuget包时它不起作用。 那么,如何在.Net Framework 4.6.1应用程序中正确引用System.IO操作,该应用程序引用.Net Standard 1.4库中的System.IO代码?