kru*_*exx 7 c# unity-game-engine visual-studio
如果我创建一个列表列表.. 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);
// ...
}
Run Code Online (Sandbox Code Playgroud)
没有任何成员的评论/描述。这适用于任何其他核心类。
我可以做些什么来让 Visual Studio 2017 显示文档,这样当我想知道某个方法的作用时,我就不必按 Alt+Tab 访问官方 C# 参考文档网站?
是否需要添加任何 SDK 库才能获得文档?
我在 Unity 项目上使用 Visual Studio。
你可以这样做,但你必须知道两件事
1.Unity的framework dll所在位置:
当编辑器中的“Scripting Runtime Version”设置为“.NET 3.5 Equivalent”时,使用的 C# DLL API 位于:
<UnityInstallationDirecory>\Editor\Data\MonoBleedingEdge\lib\mono\unity
Run Code Online (Sandbox Code Playgroud)
当编辑器中的“脚本运行时版本”设置为“.NET 4.x 等效版本”时,将使用最新的框架,路径以框架版本结尾:
<UnityInstallationDirecory>\Editor\Data\MonoBleedingEdge\lib\mono\<API-version>
Run Code Online (Sandbox Code Playgroud)
这条道路将来可能会改变。要查找 Unity 正在使用的 dll 的当前路径,只需在Visual Studio 的“解决方案资源管理器”选项卡中展开程序集和引用,然后选择 C# DLL 之一。在下面的示例中,选择了System.dll,路径将显示在属性下。
2.C#标准框架dll所在位置:
在Unity编辑器中使用“.NET 3.5 Equivalent”时,所使用的相应C#框架API位于:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v3.5\Profile\Client
Run Code Online (Sandbox Code Playgroud)
在Unity编辑器中使用“.NET 4.x Equivalent”时,所使用的相应C#框架API位于:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\<API-version>
Run Code Online (Sandbox Code Playgroud)
在 Visual Studio 中显示 C# 核心文档:
现在您已经知道了这些位置,请注意#2中标准框架位置中的每个 dll都有一个以扩展名结尾的免费 xml 文件。例如,dll 具有在同一文件夹中命名的补充文件。每个文件都包含每个相应 dll 文件的文档。.xmlSystem.Core.dllSystem.Core.xmlxml
您所要做的就是将xml每个dll文件从标准框架位置复制到Unity 框架 dll位置。重新启动 Visual Studio,文档应该可以正常工作。
手动执行此操作非常耗时,因此我制作了一个编辑器插件来处理它。通过转到程序员-->启用核心文档菜单来启用它,并通过转到程序员-->禁用核心文档菜单来禁用它。您必须重新启动 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");
}
}
Run Code Online (Sandbox Code Playgroud)
到 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");
}
}
Run Code Online (Sandbox Code Playgroud)
我会发布评论并包含一些证明图像,但我还没有足够的业力。
下面是它在 Visual Studio 中处理项目的图像的链接.NET 2.0。
| 归档时间: |
|
| 查看次数: |
1239 次 |
| 最近记录: |