标签: .net-standard

从Windows类库引用.NET标准库

目前我的解决方案中有两个项目:Windows类库(针对.NET Framework 4.6.1)和另一个面向.NET Standard 1.3的类库.我正在使用Visual Studio 2015 Update 3.

我从其他项目添加了对.NET Standard项目的引用,它出现在引用列表中,但是当我想使用它时,我看不到引用库中的任何类或命名空间(即使引用的库已成功构建且没有错误).

这是.NET标准库项目的project.json:

{
  "version": "1.0.0-*",

  "dependencies": {
    "NETStandard.Library": "1.6.0"
  },

  "frameworks": {
    "netstandard1.3": {
      "imports": "dnxcore50"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我认为.NET 4.6.1项目可以使用.NET Standard 1.3库,我甚至尝试使用较低版本(1.0),但结果是一样的.我在这里错过了什么?

如果我跑

dotnet恢复

它也工作正常:

log  : Restoring packages for C:\Users\Zsolt\Documents\Visual Studio 2015\Projects\PWB\PWBSpreadsheet.Entities\project.json...
log  : Restoring packages for C:\Users\Zsolt\Documents\Visual Studio 2015\Projects\PWB\PWBSpreadsheet.Parser\project.json...
log  : Writing lock file to disk. Path: C:\Users\Zsolt\Documents\Visual Studio 2015\Projects\PWB\PWBSpreadsheet.Parser\project.lock.json
log  : C:\Users\Zsolt\Documents\Visual Studio 2015\Projects\PWB\PWBSpreadsheet.Parser\PWBSpreadsheet.Parser.xproj
log  : Restore completed in 408ms. …
Run Code Online (Sandbox Code Playgroud)

.net c# portable-class-library .net-standard

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

将bindingRedirect添加到.Net标准库

我有一个.Net标准库,我在尝试使用其中一个依赖库时遇到错误,我认为这是一个版本冲突.在旧式.Net类库中,我可能会添加如下内容:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)

但是,我显然不能在Net Standard库中这样做; 所以,我的问题是,在.Net标准世界中解决此类问题的策略是什么?

.net dependencies assembly-binding-redirect .net-standard

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

已使用 '.NETFramework,Version=v4.6.1' 而不是项目目标框架 ' 恢复

我正在尝试引用一个 nuget 包,它显然是.NetStandard2.0. 我们拥有此包的源代码并将其写入目标 .netstandard。我们确实有一个 CI 管道,因此当我们推送此代码时,它会构建和发布 nuget 包。当我尝试将生成的 nuget 包引用到我当前的 .netCore 应用程序中时,出现以下错误:

was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETCoreApp,Version=v2.1'. This package may not be fully compatible with your project.

这对我来说没有任何意义。到目前为止,我已经尝试了以下调试步骤:

  • 直接引用源代码作为我项目的项目引用。哪个工作得很好。
  • 分析生成的 nuget 包dotpeek以确保它实际上是一个 .netstandard 包。

不知道是什么让它认为它在任何时候都是针对的。下面是我的 .csproj 配置的样子

<TargetFramework>netstandard2.0</TargetFramework>

不确定这里是否有任何其他配置块重要,但如果您需要更多信息,请告诉我。有任何想法吗?

.net nuget .net-core .net-standard

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

.Net Standard中CompileToMethod的替代品

我现在正在移植一些使用表达式到.Net Core应用程序的库,并遇到了一个问题,我的所有逻辑都基于这个问题LambdaExpression.CompileToMethod.这里是示例代码:

public static MethodInfo CompileToInstanceMethod(this LambdaExpression expression, TypeBuilder tb, string methodName, MethodAttributes attributes)
{
    ...

    var method = tb.DefineMethod($"<{proxy.Name}>__StaticProxy", MethodAttributes.Private | MethodAttributes.Static, proxy.ReturnType, paramTypes);
    expression.CompileToMethod(method);

    ...
}
Run Code Online (Sandbox Code Playgroud)

是否有可能以某种方式重写它以使用表达式生成方法成为可能?我已经可以使用Emit但它非常复杂,我想避免它支持高级表达式.

我尝试使用var method = expression.Compile().GetMethodInfo();但在这种情况下我收到一个错误:

System.InvalidOperationException:无法从其他模块导入全局方法或字段.

我知道我可以手动发出IL,但我需要完全转换Expression- > MethodInfo绑定到特定TypeBuilder而不是DynamicMethod在它上面构建自己.

.net c# .net-core .net-standard

16
推荐指数
2
解决办法
1597
查看次数

类型不包含'GetProperties'的定义

我正在将库项目迁移到.net标准,当我尝试使用System.ReflectionAPI调用时,我收到以下编译错误Type:GetProperties():

类型不包含'GetProperties'的定义

这是我的project.json:

{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable"
  },
  "dependencies": {},
  "frameworks": {
    "netstandard1.6": {
      "dependencies": {
        "NETStandard.Library": "1.6.0"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

.net-core .net-standard

16
推荐指数
2
解决办法
4349
查看次数

netcoreapp2.0与netstandard2.0对库项目的优势

我有一个预先存在的dotnet 4.6.2解决方案,它包含两个外部项目(同时移植)和一个共享core库.

我需要选择核心组件TargetFramework,它可以是netcoreapp2.0netstandard2.0.

既然它不可执行,也不会被任何外部项目引用,那么这两种方式有什么优势吗?

.net .net-core .net-standard

16
推荐指数
2
解决办法
6227
查看次数

Azure Function出错:此平台不支持System.Drawing

(如果这个问题措辞不够,有人可以帮我清理一下吗?)

我有一个Azure功能(2.0),它依赖于一些System.Drawing代码.我添加了一个NuGet引用System.Drawing.Common(4.5.0).

但是,在发布应用程序后,调用该函数时,会产生错误:

System.Private.CoreLib:执行函数时出现异常:[MyFunctionName].System.Drawing.Common:此平台不支持System.Drawing.

据我所知,现在.NET Core支持System.Drawing.Common,我相信我的Azure功能正在运行的环境.但实际项目是.NET Standard 2.0项目.

我很困惑如何解决这个问题.我已经尝试将项目转换为.NET Core 2.1项目,但这导致了与"元数据生成失败"相关的奇怪错误,并且无法找到System.Runtime.

我的项目引用了Microsoft.Azure.WebJobs.Extensions.EventGrid(2.0.0-beta2),如果这是相关的.

azure .net-core azure-functions .net-standard azure-functions-runtime

16
推荐指数
2
解决办法
3947
查看次数

在 EF Core 中,如何检查是否需要迁移?

我在 Xamarin.iOS 应用程序中使用 Entity Framework Core。

在包含在 iOS 应用程序和其他应用程序之间共享的代码 (.netstandard 2.0) 的核心项目中,我想知道是否需要迁移,以便我也可以执行一些其他操作。

这是上下文:

public void Initialize()
{
   using (var dbContext = new MyDbContext(m_dbContextOptions))
   {
       --> bool isNeeded = demoTapeDbContext.Database.IsMigrationNeeded()

       demoTapeDbContext.Database.Migrate();
   }
}
Run Code Online (Sandbox Code Playgroud)

我发现的最接近的是调用该方法GetPendingMigrationsAsync()并检查待处理迁移的数量,但我不确定这是否是在实体框架中进行此类检查的最安全方法:

public async Task InitializeAsync()
{
   using (var dbContext = new MyDbContext(m_dbContextOptions))
   {
       bool isMigrationNeeded = (await demoTapeDbContext.Database.GetPendingMigrationsAsync()).Any();

       demoTapeDbContext.Database.Migrate();
   }
}
Run Code Online (Sandbox Code Playgroud)

c# .net-standard ef-core-2.1

16
推荐指数
2
解决办法
4941
查看次数

.NET标准API参考

更新:

所以现在似乎是一个悬而未决的问题.所以我想在完成这项工作之前我将不得不依赖.NET Core API参考并祈祷我不会打到其中一个,43 APIs that .NET Framework 4.6.1 doesn't support但官方认为...

同样依赖.NET Core API参考并考虑与.NET标准相同可能会非常令人惊讶.例如,当我查看命名空间列表时,我可以看到,System.Drawing但是当点击它时,我们意识到这是一个几乎空的命名空间,只包含6个结构.

有这样的几个名称空间吗?我不知道我必须比较.NET核心和.NET Framework文档才能得到答案.

原始邮寄:

我正在尝试找到.NET Standard API参考.

此页面上只有指向.NET Core API reference和的链接.NET Framework API reference.

是的我已经搜索过,而且我已经阅读了其他的SO问题.例如,这个答案指向.NET Core API引用而不是.NET标准,并且在此Github问题源中也是如此

但.NET Core和.NET Standard是不同的..NET Core实现.NET标准API.

我在这里看到的一个大问题是例如基于官方文档 .NET Framework 4.6.1将实现.NET Standard 2.0

在此输入图像描述

好的,除了.NET Standard Github自述页面也在说

另一方面,.NET Standard 2.0添加了许多.NET Framework 4.6.1已经支持的API.delta看起来如下:

  • .NET Standard 2.0添加了.NET Framework 4.6.1已支持的14,994个API

  • .NET Standard 2.0只有43个.NET Framework …

.net .net-core .net-standard

15
推荐指数
2
解决办法
5104
查看次数

添加对dll的引用与在.NET Standard项目中添加NuGet包

我的解决方案中有一个.NET Standard 2.0项目,我正在使用IConfiguration接口.当我写名称VS建议我引用Microsoft.Extensions.Configuration.Abstractions.dll.如果我这样做,则添加在参考节点下.但是我也可以将它添加为NuGet包.两种方式似乎都有效.我假设参考VS建议是通过项目中引用的.NET Standard SDK添加的.

添加该引用的推荐方法是哪种?每种方法有哪些优点和缺点?

.net c# .net-standard

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