小编Gig*_*igi的帖子

.NET Core和.NET标准类库项目类型有什么区别?

在Visual Studio中,您可以创建至少3种不同类型的类库:

  • 类库(.NET Framework)
  • 类库(.NET标准)
  • 类库(.NET Core)

虽然第一个是我们多年来一直使用的,但我遇到的一个主要问题是何时使用.NET Standard和.NET Core类库类型.最近,当我尝试多目标不同的框架版本创建一个单元测试项目时,我一直被这种做法所困扰.

那么,类库(.NET标准版)类库(.NET Core)之间有什么区别,为什么两者都存在,什么时候应该使用另一个呢?

.net class-library .net-core .net-standard

729
推荐指数
9
解决办法
16万
查看次数

nameof()是在编译时评估的吗?

在C#6中,您可以使用nameof()运算符来获取包含变量名称或类型的字符串.

这是在编译时评估,还是在运行时通过一些Roslyn API评估?

c# roslyn c#-6.0

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

如何使用csproj多目标.NET Core类库?

当.NET Core仍然使用该project.json格式时,您可以构建一个针对多个框架的类库(例如net451,netcoreapp1.0).

既然官方项目格式正在csproj使用MSBuild,那么如何指定要定位的多个框架?我试图寻找这个在VS2017的项目设置,但我能只针对从.NET框架的核心在单一框架(它甚至没有列出我的其他完整的.NET框架版本已经安装) :

在此输入图像描述

c# msbuild csproj .net-core visual-studio-2017

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

C#不会在开头附近编译一个带有\ 0的长const字符串

我遇到了一个特殊的情况,我在创建某些类型的字符串时遇到以下错误:

写入调试信息时出现意外错误 - '错误HRESULT E_FAIL已从调用COM组件返回.

这个错误对Stack Overflow来说并不新鲜(请参阅此问题此问题),但所提出的问题此问题无关.

对我来说,当我创建一个特定长度的const字符串时会发生这种情况,该字符串\0在开头附近的某处包含一个空终止字符().

要重现,首先生成一个适当长度的字符串,例如使用:

var s = new string('a', 3000);
Run Code Online (Sandbox Code Playgroud)

在运行时抓取结果字符串(例如,立即窗口或将鼠标悬停在变量上并复制其值).然后,做出一个const:

const string history = "aaaaaa...aaaaa";
Run Code Online (Sandbox Code Playgroud)

最后,\0在某处放置一个:

const string history = "aaaaaaaaaaaa\0aa...aaaaa";
Run Code Online (Sandbox Code Playgroud)

我注意到的一些事情:

  • 如果你\0接近结束,错误不会发生.
  • 使用.NET Framework 4.6.1和4.5重现
  • 如果字符串很短,则不会发生.
  • 编辑:以下评论中提供更多珍贵信息.

知道为什么会这样吗?这是某种虫子吗?

编辑:提交错误,包括评论信息.谢谢大家.

c# string

41
推荐指数
1
解决办法
1030
查看次数

如何从.NET Core/Standard项目中排除文件/文件夹?

在.NET Core和.NET Standard项目中,如果将文件和文件夹放在项目目录中,它们将由Visual Studio自动获取; 基本上他们是项目的一部分.

如果我在那里有文件/文件夹并不是项目本身的一部分(在代码或内容方面) - 如果没有完全删除它们,我有什么方法可以将它们从项目中排除,因为我可以使用项目定位完整的.NET Framework?

.net msbuild .net-core visual-studio-2017 .net-standard

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

如何在EF Core 2.0中显示基础SQL查询?

在这个" .NET Core 2.0 Released! "视频结束时的3:15 ,Diego Vega展示了Entity Framework Core 2.0中的新功能演示.作为其中一部分,控制台应用程序中显示了底层SQL的转储.

在此输入图像描述

我在Stack Overflow上看到很多答案,建议人们使用SQL分析器来查看底层查询.但现在我很好奇:你怎么能做Diego Vega所做的事情,并在应用程序中显示查询?

c# entity-framework-core

29
推荐指数
10
解决办法
2万
查看次数

加密WPF应用程序中的凭据

在WPF应用程序中,我想提供典型的"记住我"选项来记住凭据,并在下次启动应用程序时自动使用它们.

使用单向散列显然不是一种选择,虽然我可以将凭据存储在独立存储注册表中,但在加密凭据时有一个问题需要处理.

如果我使用对称密钥加密算法,我将需要将密钥存储在某处.例如,如果密钥在内存中是硬编码的,那么我想可以很容易地拆解.NET程序集并找到它.

在.NET中加密凭据并保持其安全性的最佳方法是什么,使加密密钥完全无法访问?

c# security encryption wpf credentials

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

.NET 4.6的Task.CompletedTask有什么意义?

这篇博文提到了新的Task API,包括.NET 4.6中引入的一个新的Task.CompletedTask属性.

为什么要添加?比起比这更好的是什么Task.FromResult(whatever)

c# task .net-4.6

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

在Dispatcher.BeginInvoke()中使用async/await

我有一个方法,其中包含一些执行await操作的代码:

public async Task DoSomething()
{
    var x = await ...;
}
Run Code Online (Sandbox Code Playgroud)

我需要在Dispatcher线程上运行该代码.现在,Dispatcher.BeginInvoke()是等待的,但我无法将lambda标记为从内部async运行await,如下所示:

public async Task DoSomething()
{
    App.Current.Dispatcher.BeginInvoke(async () =>
        {
            var x = await ...;
        }
    );
}
Run Code Online (Sandbox Code Playgroud)

在内心async,我得到错误:

无法将lambda表达式转换为类型'System.Delegate',因为它不是委托类型.

我如何async从内部工作Dispatcher.BeginInvoke()

c# wpf lambda asynchronous async-await

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

在字符串插值中格式化破折号

我刚刚在C#6.0中查看了新的字符串插值功能(有关详细信息,请参阅Roslyn语言功能页面).使用当前语法(预计会改变),你可以做这样的事情(例子来自我刚才写的博客文章):

var dob2 = "Customer \{customer.IdNo} was born on \{customer.DateOfBirth:yyyyMdd}";
Run Code Online (Sandbox Code Playgroud)

但是,我似乎无法在格式化部分中包含短划线,例如:

var dob2 = "Customer \{customer.IdNo} was born on \{customer.DateOfBirth:yyyy-M-dd}";
Run Code Online (Sandbox Code Playgroud)

如果我这样做,我会收到错误:

错误CS1056意外字符' - 'StringInterpolation Program.cs 21

有什么方法可以让破折号在格式化部分工作吗?我知道我可以使用string.Format(),但我想看看它是否可以用字符串插值完成,就像练习一样.

编辑:因为似乎没有人知道我在说什么,请看关于这个主题的博客文章,看看它应该如何工作.

c# string-formatting string-interpolation c#-6.0

22
推荐指数
2
解决办法
8723
查看次数