.NET类库在打包为NuGet包的时候,如果需要加入XML文档,则需要在生成时启用XML文档文件的输出。生成时输出的XML文档文件在打包时会自动被包含在NuGet包中,无需另行将其包含到项目中。
要在生成时输出XML文档文件,只需在项目文件(.csproj)中的<PropertyGroup>
节点内插入如下内容即可:
<GenerateDocumentationFile>true</GenerateDocumentationFile>
Windows,C#,.NET以及更多
.NET类库在打包为NuGet包的时候,如果需要加入XML文档,则需要在生成时启用XML文档文件的输出。生成时输出的XML文档文件在打包时会自动被包含在NuGet包中,无需另行将其包含到项目中。
要在生成时输出XML文档文件,只需在项目文件(.csproj)中的<PropertyGroup>
节点内插入如下内容即可:
<GenerateDocumentationFile>true</GenerateDocumentationFile>
编写程序的时候,人们的直观感觉通常认为,程序的执行顺序是按照语句的顺序进行的。然而,许多编程语言的规范是允许实际执行顺序与语句编写顺序不符的。实际上,编译器为了完成某种优化,常常会对一些操作进行适当的顺序调整,导致一些预料之外的现象。
继续阅读“C#执行顺序带来的潜在问题”.NET Core / .NET Standard标准库中,命名空间System.Collections.Generic
中,一些类是通过包System.Collections
分发的。本文分析了该包中不那么基础又有点令人混淆的SortedDictionary
、SortedList
和SortedSet
这三个类,并对有些相似的SortedList
和SortedSet
进行了一些性能对比。
System.Collections
包的源代码位于https://github.com/dotnet/runtime/tree/master/src/libraries/System.Collections。
在Visual Studio中使用第三方库的时候,若第三方库没有通过NuGet分发,则通常需要自行将DLL文件复制到生成目录才能正常运行程序。通过将文件直接包含到项目中可以自动完成该任务,但会在解决方案资源管理器中看到大量DLL文件。本文介绍一种方法,通过在MSBuild文件(csproj、vcxprj等)中添加目标和任务,实现生成时自动将DLL文件复制到生成目录。
继续阅读“通过MSBuild任务自动复制DLL文件”如果要在.NET的项目中使用同一个解决方案中的Visual C++动态链接库项目中的函数,则需要将Visual C++项目中生成的.dll文件复制到.NET项目的输出路径中,否则.NET程序运行时将无法加载所需的.dll文件。
使用“添加引用”功能在.NET项目中添加对Visual C++项目的引用是没有用的。MSBuild并不会把.dll文件复制到.NET项目的输出目录。
继续阅读“.NET项目自动复制VC++生成的动态库”HTTP的响应头中的Content-Disposition项会给出建议的文件名。而.NET网络库的HttpResponseMessage.Headers中并不包含Content-Disposition这一项。以下代码会得到null,而不是相应的响应头:
using (HttpClient client = new HttpClient())
{
var request = new HttpRequestMessage(HttpMethod.Head, uri);
var result = await client.SendAsync(request);
result.Headers.TryGetValues("Content-Disposition", out IEnumerable<string> values);
return values;
}
继续阅读“.NET中读取HTTP请求的文件名” 在使用P/Invoke(平台调用)从.NET(例如C#)调用C++本机函数时,可以选择将数组以指针的形式传递。但如果数组是结构体中的成员时,就只能通过SafeArray或者按值传递数组的方式传递了,无法用指针的形式传递。那么问题来了,如果要在P/Invoke中使用一个带有动态数组成员的结构体,又不想用SafeArray,该如何实现呢?
继续阅读“P/Invoke以指针形式传递结构体内的数组”Java和C#都有内嵌类(Nested Class)这一概念,可以在一个类的内部定义另一个类。但Java和C#中的内嵌类是不太一样的。C#的内嵌类概念接近Java的静态内嵌类。
继续阅读“Java和C#中内嵌类的区别”如果一个类标记了DataContractAttribute
,那么DataContractSerializer
在反序列化时会跳过所有的变量初始值和构造函数。例如,下面定义的这个类在反序列化时会引发NullReferenceException
: 继续阅读“使用DataContractSerializer时的对象初始化”
多维数组是C#中的一种数据结构。使用多维数组时,不同维度的数组元素在内存中的布局形式是怎样的呢?