dotPeek 未显示所有参考文献

dotPeek not showing all references

我正在查看 dotPeek 中的 System.Web.Http 程序集,但看不到对 Newtonsoft.Json

的引用

尽管我知道 System.Web.Http.Results.JsonResult 使用 Newtonsoft.Json 因为它是序列化器,不像它是 System.Web.Mvc 堂兄。

using Newtonsoft.Json;
using System;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.Http;

namespace System.Web.Http.Results
{
  /// <summary>
  /// Represents an action result that returns an <see cref="F:System.Net.HttpStatusCode.OK"/> response with JSON data.
  /// </summary>
  /// <typeparam name="T">The type of content in the entity body.</typeparam>
  public class JsonResult<T> : IHttpActionResult

现在我明白 Newtonsoft.Json 如果尚未按照 WebGrease 依赖项安装,在大多数情况下会从 Nuget 中下载,但我不明白为什么它没有出现在参考文献中.

它确实在 AssemblyInfo 文件中显示为注释:

using System;
using System.Diagnostics;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;

// Assembly System.Web.Http, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
// MVID: F99F496C-B0D2-49C1-A945-C1FCABCE1695
// References: mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// References: System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// References: System.Net.Http.Formatting, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
// References: System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// References: System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// References: System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// References: Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
// References: System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
// References: System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

[assembly: AssemblyTrademark("")]
[assembly: NeutralResourcesLanguage("en-US")]
[assembly: AssemblyConfiguration("")]
[assembly: ComVisible(false)]
[assembly: CLSCompliant(true)]
[assembly: AssemblyCompany("Microsoft Corporation.")]
[assembly: AssemblyMetadata("Serviceable", "True")]
[assembly: AssemblyProduct("Microsoft ASP.NET MVC")]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Extension]
[assembly: TargetFramework(".NETFramework,Version=v4.5", FrameworkDisplayName = ".NET Framework 4.5")]
[assembly: SatelliteContractVersion("5.2.3.0")]
[assembly: AssemblyCopyright("© Microsoft Corporation. All rights reserved.")]
[assembly: AssemblyFileVersion("5.2.30128.0")]
[assembly: AssemblyInformationalVersion("5.2.3-30128 (0e974218e12a67d4b1f25422119e40cfe6953e46)")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyTitle("System.Web.Http")]
[assembly: Guid("70cecdcd-46f5-492b-9e1f-1d9a947f1fd1")]
[assembly: InternalsVisibleTo("System.Web.Http.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")]
[assembly: InternalsVisibleTo("System.Web.Http.Integration.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")]
[assembly: AssemblyVersion("5.2.3.0")]

这是一个设置,还是一个 dotPeek 怪癖,或者是关于构建程序集的方式,还是其他什么?

我知道这是一个老问题,但在研究这个问题时我看到这个问题没有答案 post,所以我想我会回答它。它不显示在 dotPeek 中的原因是 dotPeek 不显示它无法加载的程序集的引用

您可以相当简单地重现这一点,方法是创建一个包含两个程序集的简单项目,其中一个程序集引用另一个程序集。如果将 DLL 复制到文件夹中,并在 dotPeek 中查看引用程序集,它将显示引用的程序集。从 dotPeek 中删除它,从文件夹中删除引用程序集并再次查看引用程序集 - 您将看到引用已从 dotPeek 中消失(除了在 AssemblyInfo.cs 中,如您上面提到的)。

FWIW,由于这个问题,我已经转向使用 ILSpy,因为它不会遇到同样的问题。

因为这个问题的答案提到了 DotPeek 没有显示所有引用的原因是因为它找不到引用的程序集。

DotPeek 2016.2 不再是这种情况。不存在程序集的引用将使用黄色圆圈上的问号显示

Screenshot with referenced assembly not present in the same folder as the examined assembly

Screenshot with referenced assembly present in the same folder as the examined assembly