在Visual Studio中,您可以创建至少3种不同类型的类库:
虽然第一个是我们多年来一直使用的,但我遇到的一个主要问题是何时使用.NET Standard和.NET Core类库类型.最近,当我尝试多目标不同的框架版本并创建一个单元测试项目时,我一直被这种做法所困扰.
那么,类库(.NET标准版)和类库(.NET Core)之间有什么区别,为什么两者都存在,什么时候应该使用另一个呢?
在C#6中,您可以使用nameof()运算符来获取包含变量名称或类型的字符串.
这是在编译时评估,还是在运行时通过一些Roslyn API评估?
当.NET Core仍然使用该project.json格式时,您可以构建一个针对多个框架的类库(例如net451,netcoreapp1.0).
既然官方项目格式正在csproj使用MSBuild,那么如何指定要定位的多个框架?我试图寻找这个在VS2017的项目设置,但我能只针对从.NET框架的核心在单一框架(它甚至没有列出我的其他完整的.NET框架版本都已经安装) :
我遇到了一个特殊的情况,我在创建某些类型的字符串时遇到以下错误:
写入调试信息时出现意外错误 - '错误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 Core和.NET Standard项目中,如果将文件和文件夹放在项目目录中,它们将由Visual Studio自动获取; 基本上他们是项目的一部分.
如果我在那里有文件/文件夹并不是项目本身的一部分(在代码或内容方面) - 如果没有完全删除它们,我有什么方法可以将它们从项目中排除,因为我可以使用项目定位完整的.NET Framework?
在这个" .NET Core 2.0 Released! "视频结束时的3:15 ,Diego Vega展示了Entity Framework Core 2.0中的新功能演示.作为其中一部分,控制台应用程序中显示了底层SQL的转储.
我在Stack Overflow上看到很多答案,建议人们使用SQL分析器来查看底层查询.但现在我很好奇:你怎么能做Diego Vega所做的事情,并在应用程序中显示查询?
这篇博文提到了新的Task API,包括.NET 4.6中引入的一个新的Task.CompletedTask属性.
为什么要添加?比起比这更好的是什么Task.FromResult(whatever)?
我有一个方法,其中包含一些执行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#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# ×8
.net-core ×3
.net ×2
c#-6.0 ×2
msbuild ×2
wpf ×2
.net-4.6 ×1
async-await ×1
asynchronous ×1
credentials ×1
csproj ×1
encryption ×1
lambda ×1
roslyn ×1
security ×1
string ×1
task ×1