'Newtonsoft.Json.dll'和'NuGetApi2.dll'中都存在'Newtonsoft.Json.JsonConvert'类型

Mat*_*ius 9 .net c# dll nuget visual-studio-2013

我试图通过使用动态序列化对象到即时窗口

Newtonsoft.Json.JsonConvert.SerializeObject(myObj);
Run Code Online (Sandbox Code Playgroud)

但是我得到了以下错误

'Newtonsoft.Json.dll'和'NuGetApi2.dll'中都存在'Newtonsoft.Json.JsonConvert'类型

它发生时.dll未在项目中引用放入bin旁边的其他文件夹下.dll,其设置在项目中引用,并具有(在这种情况下,内同一个库Newtonsoft.JsonNuGetApi2.dll该项目ins't参考)

为什么我在使用立即/调试窗口时才会出现此异常,而不是在编译代码时?(当编译它的工作正常,因为编译器正在使用项目中引用的dll)

如何告诉Visual Studio .dll使用哪个(最好不必停止程序运行)? 一个显而易见的方法是删除.dll未在项目中引用的内容,....我要求的是:有没有办法告诉它dll通过代码使用哪些Immediate window....

更新:重现bug的解决方案可以在这里找到:

https://github.com/liufa/Temp

解决方案是压缩的WebApplication1.7z,我使用MVC应用程序,重现添加断点HomeController,Index方法以及何时将其粘贴Newtonsoft.Json.JsonConvert.SerializeObject("sfdsdfsdf");到Visual Studio的即时窗口中.

项目代码如下:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var x = Newtonsoft.Json.JsonConvert.SerializeObject("sdfsdf");
#if DEBUG    
        var y = Newtonsoft.Json.JsonConvert.SerializeObject("sfssesss");
#endif
        return View(); //put breakpoint here then into immediate window paste Newtonsoft.Json.JsonConvert.SerializeObject("sdfsdf"); and you should get the error.
    }
Run Code Online (Sandbox Code Playgroud)

bik*_*868 -1

默认情况下,.Net 网站在启动时加载 bin 文件夹中的所有程序集。您可以通过修改 web.config 文件来更改此行为,在这种情况下,您需要列出要加载的程序集。

这是一个仅加载 1.0.0.0 版本的示例MySite.dll

<system.web>
  <compilation>
    <assemblies>
      <remove assembly="*" />
      <add assembly="MySite, Version=1.0.0.0, Culture=neutral />
    </assemblies>
  </compilation>
</system.web>
Run Code Online (Sandbox Code Playgroud)

如果您只加载所需的程序集而不加载 NuGetApi2 程序集,这应该可以解决您的问题