jga*_*fin 23 c# json.net visual-studio-extensions .net-4.5.2 visual-studio-2015
我有以下对象:
public class ProjectInfo
{
public string ConnectionStringName { get; set; }
public string DefaultEntityNamespace { get; set; }
public string DefaultSharedNamespace { get; set; }
public string DefaultTestNamespace { get; set; }
public string SqlProviderName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我尝试做一个简单的序列化(在VSIX项目中):
var settings = new ProjectInfo { ConnectionStringName = "SomeName" };
var json = JsonConvert.SerializeObject(settings);
Run Code Online (Sandbox Code Playgroud)
这给了我:
An exception of type 'System.IO.FileNotFoundException' occurred in Newtonsoft.Json.dll but was not handled in user code
Additional information: Could not load file or assembly 'System.Xml.Linq, Version=5.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)
我花了最后一小时试图找出依赖关系的来源或Json.NET为什么尝试使用该命名空间.我的任何项目都没有引用System.Xml.Linq.
从堆栈跟踪中我可以看到:
at Newtonsoft.Json.Converters.XmlNodeConverter.CanConvert(Type valueType)
at Newtonsoft.Json.JsonSerializer.GetMatchingConverter(IList`1 converters, Type objectType)
at Newtonsoft.Json.Serialization.DefaultContractResolver.InitializeContract(JsonContract contract)
at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(Type objectType)
at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(Type objectType)
at Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(Type type)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType)
at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType)
at Newtonsoft.Json.JsonConvert.SerializeObjectInternal(Object value, Type type, JsonSerializer jsonSerializer)
at Newtonsoft.Json.JsonConvert.SerializeObject(Object value)
Run Code Online (Sandbox Code Playgroud)
..但为什么要采取这条路线?
更新
一个简单的测试用例也失败了:
[Fact]
public void should_be_Able_to_Serialize_settings()
{
JsonConvert.SerializeObject(new ProjectInfo {ConnectionStringName = "Arne"});
}
Run Code Online (Sandbox Code Playgroud)
更新2
这个项目以前工作过.它也适用于同事的计算机.我能看到的唯一区别是我已升级到VStudio 2015 Update 1.(或者我在某处犯了一个愚蠢的错误).但我也对我的同事使用的最新修订版进行了重新设置.
为什么它试图引用System.Linq.Xml的v5.0.5?v4.0.0不是.NET 4.5的标准版吗?v5.0.5属于哪个版本的.NET?
(我之前从未遇到类似Json.NET的问题.它是否与VStudio 2015/.NET 4.5.2/VSIX项目有关?)
UPDATE3
这是依赖项.他们表明Json.NET试图引用那个确切的版本:
更新:
项目文件中的Json.NET参考:
<Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=c70b2336aed9f731, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
Run Code Online (Sandbox Code Playgroud)
编辑4:
我的问题是扩展无法工作,因为它尝试加载不存在的程序集.据我了解,v5.0.5是一个silverlight程序集.我不使用silverlight.
我试图添加一个程序集重定向,但它似乎不起作用.
<dependentAssembly>
<assemblyIdentity name="System.Xml.Linq" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-5.0.5.0" newVersion="4.0.0.0"/>
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)
Json.NET 使用 System.Xml.Linq 将 json 转换为 xml。
只要您不引用依赖项中的任何类型,您就能够在没有库依赖项的情况下进行编译。这个是正常的。我对 NHibernate 的 Iesi.Collections 依赖也有同样的问题。
我查看了 Json.Net 源代码,System.Xml.Linq 的 using 语句针对 .Net 版本进行了条件化。您和您的同事运行相同的 .Net 版本吗?您最近是否更改了计算机上的.Net?
我的建议是完全删除 NHibernate 和任何依赖项。然后使用 NuGet 安装 Json.Net。NuGet 将自动添加所有依赖项并执行任何所需的程序集绑定重定向。
即使您不想使用 NuGet,也可以运行 diff 并查看它所做的更改,以便您可以进行相同的操作。
| 归档时间: |
|
| 查看次数: |
830 次 |
| 最近记录: |