小编Ath*_*ari的帖子

NuGet包应该支持哪些.NET版本以最大化其可用性和功能?

TL; DR:

  • 鉴于:我编写了一个具有相对便携功能的库(例如Left.Pad.©.dll).我想通过NuGet提供它.

  • 要求:如果有人想用我的库中的任何版本的任何平台上的任何版本的任何操作系统的任何在编写代码的更新安装任何 IDE或任何代码编辑器,他们应该能够做到这一点.

  • 问:什么是最低的NuGet 目标框架,以实现这一目标?

  • 奖金问题:如果存在任何不应该被定位的"死"框架,或者在选择目标框架时应该考虑的其他内容,您也可以提及它.


思想(旧版):

NuGet包支持多个.NET Framework版本和配置文件,例如,包可以提供net20,net30,net35,net40,net45,sl3,sl4,sl5等版本.但是,假设包的功能并不总是存在差异提供大量版本会浪费构建时间和封装大小,并导致不必要的复杂性.另一方面,提供仅支持最低支持的Framework版本的软件包可能会导致功能丢失,例如.NET 4支持多个CLR版本的进程内并行执行,但以前的版本不支持,因此此功能如果只提供.NET 3.5的版本(我不确定;我从未使用它并且不知道细节),将会丢失.如果提供PCL版本,逻辑很简单我假设:只是排除PCL涵盖的版本.

.net c# compatibility nuget .net-standard

19
推荐指数
2
解决办法
2199
查看次数

无法为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)
  - wp8 (WindowsPhone,Version=v8.0)
  - wpa81 (WindowsPhoneApp,Version=v8.1)
  - xamarinios10 (Xamarin.iOS,Version=v1.0)
  - xamarinmac20 (Xamarin.Mac,Version=v2.0)
  - xamarintvos10 (Xamarin.TVOS,Version=v1.0)
  - xamarinwatchos10 (Xamarin.WatchOS,Version=v1.0)
One or more packages are incompatible with .NETStandard,Version=v1.3.
Package …
Run Code Online (Sandbox Code Playgroud)

c# visual-studio nuget .net-core .net-standard

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

使Firefox和Chrome以特定名称下载图像

鉴于https://www.example.com/image-list:

...
<a href="/image/1337">
  <img src="//static.example.com/thumbnails/86fb269d190d2c85f6e0468ceca42a20.png"/>
</a>
<a href="//static.example.com/full/86fb269d190d2c85f6e0468ceca42a20.png"
   download="1337 - Hello world!.png">
  Download
</a>
...
Run Code Online (Sandbox Code Playgroud)

这是一个用户脚本环境,因此我无法访问服务器配置.因此:

  1. 我无法使服务器接受用户友好的文件名https://static.example.com/full/86fb269d190d2c85f6e0468ceca42a20 - 1337 - Hello World!.png.
  2. 我无法配置跨源资源共享.www.example.comstatic.example.com由CORS壁由设计分离.

当用户点击"下载"链接时,如何使Firefox和Chrome显示" 将文件另存为"对话框,其中包含建议的文件名"1337 - Hello world!.png"

经过一些失败和谷歌搜索,我学到了这些问题:

  1. Firefox完全忽略download了某些图像MIME类型上属性的存在.
  2. Firefox完全忽略download了跨站点链接上属性的存在.
  3. Chrome完全忽略download了跨网站链接上的属性值.

所有这些观点对我来说都没有任何意义,所有这些看起来都像是"让我们对这个特征进行随机的非感性限制",但我必须接受它们,因为这是我的环境.

有办法解决问题吗?


背景:我正在为使用MD5哈希作为文件名的图像板编写用户脚本.我希望用户友好的名称更容易保存.让我更接近这一点的任何事情都会有所帮助.

我想我可以通过使用blob的对象URL和带有被攻击的CORS头的本地代理来解决这些限制,但这种设置显然是不合理的.通过画布保存可以工作(在这种情况下,CORS的图像是"受保护"吗?),但它会强制进行双重有损压缩或有损无损转换,给定JPEG文件,这些都不是好的.

html javascript firefox google-chrome cors

19
推荐指数
2
解决办法
3759
查看次数

允许异步方法一次只调用一个实例

我有一个方法不能同时在多个线程中执行(它写入文件).我不能用lock,因为方法是async.如何避免在另一个线程中调用该方法?程序应该等待上一次调用完成(也是异步),而不是第二次调用它.

例如,使用以下代码创建一个新的C#控制台应用程序:

using System;
using System.IO;
using System.Threading.Tasks;
namespace ConsoleApplication1 {
    internal class Program {

        private static void Main () {
            CallSlowStuff();
            CallSlowStuff();
            Console.ReadKey();
        }

        private static async void CallSlowStuff () {
            try {
                await DoSlowStuff();
                Console.WriteLine("Done!");
            }
            catch (Exception e) {
                Console.WriteLine(e.Message);
            }
        }

        private static async Task DoSlowStuff () {
            using (File.Open("_", FileMode.Create, FileAccess.Write, FileShare.None)) {
                for (int i = 0; i < 10; i++) {
                    await Task.Factory.StartNew(Console.WriteLine, i);
                    await Task.Delay(100);
                }
            }
        } …
Run Code Online (Sandbox Code Playgroud)

.net c# locking task-parallel-library async-await

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

'无法加载文件或程序集'netstandard,Version = 2.0.0.0,...'.不应加载引用程序集以执行

目标: 从.NET 4.7控制台应用程序,使用Assembly.GetType()的反射,我尝试从程序集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);
Run Code Online (Sandbox Code Playgroud)

哪个投掷:

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上下文中加载.(HRESULT异常:0x80131058)'

内部异常:BadImageFormatException:无法加载引用程序集以执行.

我所知道的: 我知道他们希望我们使用Assembly.ReflectionOnlyLoadFrom加载DLL.但这样做会阻止我使用Activator.CreateInstance()实现类型.请参阅Microsoft官方帖子

另外,我尝试在我的控制台应用程序中引用Nuget软件包NETStandard.Library 2.0.0-preview1-25301-01和NETStandard.Library.NETFramework 2.0.0-preview1-25305-02,这样它就会引用netstandard 2.0库,但是它没有改变任何东西.

问题: 有没有人知道是否有正确的方法来加载该DLL而没有错误,或者可能是否是一个错误,或者?或者为什么这种DLL无法加载执行?

.net c# dll .net-assembly .net-standard

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

C#重新抛出异常:如何在IDE中获取异常堆栈?

之前有关于重新抛出异常的正确方法的讨论.相反,这个问题是关于如何在使用rethrow时从Visual Studio获得有用的行为.

考虑以下代码:

   static void foo() {
        throw new Exception("boo!");
    }

    static void Main(string[] args) {
        try {
            foo();
        } catch (Exception x) {
            // do some stuff
            throw;
        }
    }
Run Code Online (Sandbox Code Playgroud)

出现的异常具有正确的堆栈跟踪,显示foo()作为异常的来源.但是,GUI调用堆栈窗口只显示Main,而我期望它显示异常的调用堆栈,一直到foo.

当没有重新抛出时,我可以使用GUI快速导航调用堆栈,以查看导致异常的调用以及我们如何到达那里.

通过重新抛出,我希望能够做同样的事情.相反,GUI显示的调用堆栈对我没用.我必须将异常详细信息复制到剪贴板,将其粘贴到记事本,然后手动导航到我感兴趣的调用堆栈的任何功能.

顺便说一句,如果我添加[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]或者如果我将catch更改为just ,我会得到相同的行为catch (Exception).

我的问题是:鉴于我使用的代码重新抛出,有人可以建议一种方便的方法来导航与异常相关的调用堆栈吗?我正在使用Visual Studio 2010.

.net c# exception visual-studio

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

aspnetcore(netcoreapp1.0)中System.Web.Security.Membership.GeneratePassword的替代方案

是否有替代System.Web.Security.Membership.GeneratePasswordin AspNetCore(netcoreapp1.0).

最简单的方法是使用一个Guid.NewGuid().ToString("n")足够长的密码,但它不是完全随机的.

asp.net asp.net-mvc asp.net-core asp.net-core-1.0 .net-standard-1.5

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

如何在每次切换到另一个选项卡时停止执行T4?

当我编辑T4时,每次切换到另一个文件时都会执行脚本.对于快速简单的脚本是可以的,但是一些脚本需要很长时间才能执行.有没有办法禁用这种行为?我希望脚本只在我保存T4文件时运行或从菜单中手动选择"运行自定义工具".

c# t4 code-generation customtool visual-studio

16
推荐指数
3
解决办法
4192
查看次数

json.net:为字典键指定转换器

我有一个JSON:

{ 
    "data": { "A": 5, "B": 6 }, 
    "foo": "foo", 
    "bar": "bar" 
}
Run Code Online (Sandbox Code Playgroud)

我需要将数据反序列化为一个类:

public Dictionary<MyEnum, int> Data { get; set; }
public string Foo { get; set; }
public string Bar { get; set; }
Run Code Online (Sandbox Code Playgroud)

但MyEnum值是CodeA,而CodeB不是简单AB分别.

我有一个可以处理转换的自定义转换器.但是如何指定JsonConverter要与Dictionary键一起使用?

c# json.net

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

节流Rx.Observable而不跳过值

Throttle如果其他人跟随太快,则方法会从可观察序列中跳过值.但我需要一种方法来延迟它们.也就是说,我需要在项目之间设置最小延迟,而不是跳过任何项目.

实际例子:有一个Web服务可以接受不超过一秒的请求; 有一个用户可以单独或批量添加请求.没有Rx,我将创建一个列表和一个计时器.当用户添加请求时,我会将它们添加到列表中.在计时器事件中,我将检查列表是否为空.如果不是,我将发送请求并删除相应的项目.随着锁和所有的东西.现在,使用Rx,我可以Subject在用户添加请求时创建,添加项目.但我需要一种方法来确保Web服务不会因应用延迟而泛滥.

我是Rx的新手,所以也许我错过了一些明显的东西.

.net c# system.reactive

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