![](/img/trans.png)
[英]C# XML documentation '<include>' tag not appearing in intellisense?
[英]Show C# reference documentation in intellisense
如果我創建一個列表列表.. Visual Studio 為其成員提供智能感知,但沒有成員的文檔。 如果我轉到 List 的定義,我會看到以下內容:
[DefaultMember("Item")]
public class List<T> : IEnumerable, ICollection, IList, ICollection<T>, IEnumerable<T>, IList<T>
{
// ...
public void Add(T item);
public void Clear();
public bool Contains(T item);
// ...
}
沒有任何成員的評論/描述。 這適用於任何其他核心類。
我該怎么做才能讓 Visual Studio 2017 顯示文檔,這樣我就不必在任何時候想知道某個方法的作用時按 Alt+Tab 到官方 C# 參考文檔網站?
是否需要添加任何 SDK 庫才能獲得文檔?
我在 Unity 項目上使用 Visual Studio。
你可以這樣做,但你必須知道兩件事
1.Unity的框架dll所在位置:
當“腳本運行時版本”在編輯器中設置為“.NET 3.5 Equivalent”時,使用的 C# DLL API 位於:
<UnityInstallationDirecory>\Editor\Data\MonoBleedingEdge\lib\mono\unity
當編輯器中的“Scripting Runtime Version”設置為“.NET 4.x Equivalent”時,使用最新的框架,路徑以框架版本結尾:
<UnityInstallationDirecory>\Editor\Data\MonoBleedingEdge\lib\mono\<API-version>
這條路在未來可能會改變。 要查找 Unity 正在使用的 dll 的當前路徑,只需在 Visual Studio 的“解決方案資源管理器”選項卡中展開程序集和引用,然后選擇 C# DLL 之一。 在下面的例子中, System.dll被選中,路徑將顯示在屬性下。
2.C#標准框架dll所在位置:
在 Unity Editor 中使用“.NET 3.5 Equivalent”時,使用的相應 C# 框架 API 位於:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v3.5\Profile\Client
在 Unity Editor 中使用“.NET 4.x Equivalent”時,使用的相應 C# 框架 API 位於:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\<API-version>
在 Visual Studio 中顯示 C# 核心文檔:
既然您知道這些位置,請注意#2 中標准框架位置中的每個 dll 都有一個以.xml
擴展名結尾的免費 xml 文件。 例如, System.Core.dll
dll,在同一文件夾中有名為System.Core.xml
補充文件。 每個xml
文件都包含每個相應 dll 文件的文檔。
您所要做的就是將每個dll
文件的xml
文件從標准框架位置復制到Unity 的框架 dll位置。 重新啟動 Visual Studio,文檔應該可以工作了。
手動操作很耗時,所以我制作了一個編輯器插件來處理它。 通過轉到Programmer --> Enable Core Documentation菜單啟用它,並通過轉到Programmer --> Disable Core Documentation菜單禁用它。 您必須重新啟動 Visual Studio 才能使其生效。
using System;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEngine;
public class DocEnabler : MonoBehaviour
{
//Replace both with the proper paths on your system
static string unityFrameworkPath = @"G:\Applications\Unity\Editor\Data\MonoBleedingEdge\lib\mono\unity";
static string stdCoreFrameworkPath = @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v3.5\Profile\Client";
[MenuItem("Programmer/Enable Core Documentation")]
static void EnableCoreDoc()
{
CopyFilesByExt(stdCoreFrameworkPath, unityFrameworkPath, "xml");
}
[MenuItem("Programmer/Disable Core Documentation")]
static void DisableCoreDoc()
{
DeleteFilesByExt(unityFrameworkPath, "xml");
}
static void DeleteFilesByExt(string path, string ext)
{
DirectoryInfo drctyInfo = new DirectoryInfo(path);
FileInfo[] files = drctyInfo.GetFiles("*." + ext)
.Where(p => p.Extension == "." + ext).ToArray();
foreach (FileInfo file in files)
{
try
{
file.Attributes = FileAttributes.Normal;
file.Delete();
//File.Delete(file.FullName);
}
catch (Exception e)
{
Debug.Log("Error while deleting file: " + file.Name + "\r\n" + e.Message);
}
}
DoneMessage();
}
static void CopyFilesByExt(string source, string destPath, string ext)
{
DirectoryInfo drctyInfo = new DirectoryInfo(source);
FileInfo[] files = drctyInfo.GetFiles("*." + ext)
.Where(p => p.Extension == "." + ext).ToArray();
foreach (FileInfo file in files)
{
try
{
string fromPath = file.FullName;
string toPath = Path.Combine(destPath, file.Name);
file.CopyTo(toPath, true);
//File.Copy(fromPath, toPath, true);
}
catch (Exception e)
{
Debug.Log("Error while Copying file: " + file.Name + "\r\n" + e.Message);
}
}
DoneMessage();
}
static void DoneMessage()
{
Debug.Log("Action complete. Restart Visual Studio for the changes to take effect");
}
}
到 2021 年。程序員的解決方案仍然有效,但位置已更改,並且需要發生另一個副本以支持 netstandard 2.0。
我希望程序員不介意,但我使用更改的默認位置調整了腳本並添加了 netstandard 2.0 位置。 JetBrains Rider 也有同樣的問題和解決方案。
我在這個領域的經驗是 2 天,所以請謹慎使用。 但它解決了我所有的問題。
編輯:我發現不僅這些目錄名稱會因系統而異,而且 Windows 默認不附帶 netstandard 參考。 當我找到它的來源時,我會更正這篇文章。
using System;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEngine;
public class DocEnabler : MonoBehaviour
{
//Replace both with the proper paths on your system
// .NET 4.x
static string unityFrameworkPath = @"C:\Program Files\Unity\Hub\Editor\2021.1.5f1\Editor\Data\MonoBleedingEdge\lib\mono\4.7.1-api";
static string microsoftFrameworkPath = @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.X";
// .NETSTANDARD 2.0
static string unityNetStandardPath = @"C:\Program Files\Unity\Hub\Editor\2021.1.5f1\Editor\Data\NetStandard\ref\2.0.0";
static string microsoftNetStandardPath = @"C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1";
[MenuItem("Programmer/Enable Core Documentation")]
static void EnableCoreDoc()
{
CopyFilesByExt(microsoftFrameworkPath, unityFrameworkPath, "xml");
CopyFilesByExt(microsoftNetStandardPath, unityNetStandardPath, "xml");
}
[MenuItem("Programmer/Disable Core Documentation")]
static void DisableCoreDoc()
{
DeleteFilesByExt(unityFrameworkPath, "xml");
DeleteFilesByExt(unityNetStandardPath, "xml");
}
static void DeleteFilesByExt(string path, string ext)
{
DirectoryInfo dirInfo = new DirectoryInfo(path);
FileInfo[] files = dirInfo.GetFiles("*." + ext)
.Where(p => p.Extension == "." + ext).ToArray();
foreach (FileInfo file in files)
{
try
{
file.Attributes = FileAttributes.Normal;
file.Delete();
}
catch (Exception e)
{
Debug.Log("Error while deleting file: " + file.Name + "\r\n" + e.Message);
}
}
DoneMessage();
}
static void CopyFilesByExt(string source, string destPath, string ext)
{
DirectoryInfo dirInfo = new DirectoryInfo(source);
FileInfo[] files = dirInfo.GetFiles("*." + ext)
.Where(p => p.Extension == "." + ext).ToArray();
foreach (FileInfo file in files)
{
try
{
string toPath = Path.Combine(destPath, file.Name);
file.CopyTo(toPath, true);
}
catch (Exception e)
{
Debug.Log("Error while Copying file: " + file.Name + "\r\n" + e.Message);
}
}
DoneMessage();
}
static void DoneMessage()
{
Debug.Log("Action complete. Restart Visual Studio for the changes to take effect");
}
}
我會作為評論發布並包含一些證明圖片,但我還沒有足夠的業力。
我在 Unity Answers 網站Here 中找到了答案。
Blue_Ninja0 的回答 · 2017 年 9 月 21 日下午 09:41
我注意到 Unity 不包括其舊單聲道運行時的 Intellisense 文檔所需的 System.xml 文件。
似乎從 Unity 2017 開始,只要您在 Player Settings 的 API Compatibility Level 設置中啟用 .NET 4.6,您就會獲得完整的文檔。 我已經測試過了,效果很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.