'XElement'在名称空间'System.Xml.Linq'中显示在vb项目中,而不是在C#中

问题描述 投票:2回答:1

我有vs 2010,32 OS机器,max framework 4.0;

我用C#语言创建了一个空网站,我在其中添加了以下DLL:

  • Newtonsoft.Json.dll版本11.0.1
  • RestSharp.Net2.dll版本1.1.11
  • 另一家公司创建的另一个dll将其用作依赖于上述dll的API;

我添加了对这些dll的引用并使用了那些对象...当我运行网站时 - >它成功运行并且结果按预期返回;

当我在VB中做同样的事情时(通过创建一个新的空网站并在其bin文件夹中添加dll然后引用它们) - >我可以使用那些对象但在编译中抛出了多个错误,例如:

错误1'XElement'在名称空间'System.Xml.Linq'中不明确。 InternalXmlHelper.vb 错误3'XName'在名称空间'System.Xml.Linq'中是不明确的。 InternalXmlHelper.vb 错误7'XAttribute'在名称空间'System.Xml.Linq'中不明确。 InternalXmlHelper.vb ....

可能是什么问题?

更新 我发现每当我删除对RestSharp dll的引用时,错误都不会在构建时显示,但如果我运行代码 - >显示错误,因为API正在使用此库,因为您可以看到Here

VB代码:

Imports CompanyX.Api
Imports CompanyX.Client
Imports CompanyX.Model

Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load    
        Configuration.SetApiKey("OurKey")
        Configuration.SetTest()
        Dim api As New JobsApi()
        Dim key As New JobKey()
        key.Id = "KeyID"
        Dim Job = api.GetJob(key.Id)
        Dim response = Job.ToString()    
    End Sub
End Class

C#代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using CompanyX.Api;
using CompanyX.Client;
using CompanyX.Model;


public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Configuration.SetApiKey("OurKey");
        Configuration.SetTest();    
        JobsApi api = new JobsApi();
        JobKey key = new JobKey();
        key.Id = "KeyID";    
        Job job = api.GetJob(key.Id);
        String response = job.ToString();    
    }
}

我试图在VB解决方案中添加Imports System.Linq但仍然无法正常工作。

c# vb.net
1个回答
1
投票

就像Jon Skeet在上面的评论中解释的那样,

  • 为什么编译失败? 因为RestSharp.Net2 package包含its own implementation of System.Linq.Xml,它与.NET Framework 4.0中的System.Linq.Xml实现冲突。你不能有两个相同的实现。
  • 但为什么这甚至是一件事呢? 因为该程序包应该与.NET Framework 2一起使用,而该程序没有附带System.Linq.Xml的实现。这就是为什么一揽子计划首先提供一个。
  • 但为什么它适用于C#? 因为与VB不同,C#不会尝试单独使用System.Linq.Xml。 VB有much fancier support for XML,它带有你无法摆脱的InternalXmlHelper.vb模块,导致错误,因为它试图使用System.Linq.Xml命名空间。 如果您使用例如C#,您将在C#中收到编译错误。 XElement。简单地将System.Xml.Linq.XElement x = null;添加到C#代码就足以导致 错误CS0433 类型'XElement'存在于'RestSharp.Net2,Version = 102.7.0.0,Culture = neutral,PublicKeyToken = null'和'System.Xml.Linq,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'
  • 那我该怎么办? 或者: 切换到为更新版本的.NET Framework设计的软件包版本,因此不会提供内置功能的冲突实现 将项目降级到设计包的FW 2.0
© www.soinside.com 2019 - 2024. All rights reserved.