gpt4 book ai didi

c# - “XElement”在命名空间中不明确 'System.Xml.Linq' 出现在 vb 项目中而不是在 C# 中

转载 作者:太空宇宙 更新时间:2023-11-03 12:17:22 24 4
gpt4 key购买 nike

我有 vs 2010,32 操作系统机器,最大框架 4.0;

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

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

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

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

Error 1 'XElement' is ambiguous in the namespace 'System.Xml.Linq'. InternalXmlHelper.vb
Error 3 'XName' is ambiguous in the namespace 'System.Xml.Linq'. InternalXmlHelper.vb
Error 7 'XAttribute' is ambiguous in the namespace '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 但仍然无法正常工作。

最佳答案

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

  • 为什么编译失败?

    因为 RestSharp.Net2 package包含 its own implementation of System.Linq.Xml这与 .NET Framework 4.0 中的 System.Linq.Xml 实现冲突。同一事物不能有两种实现方式。

  • 但为什么那是一回事呢?

    因为该包应该与 .NET Framework 2 一起使用,而 .NET Framework 2 并未随附 System.Linq.Xml 的实现。这就是为什么该软件包首先不厌其烦地提供一个。

  • 但为什么它适用于 C#?

    因为与 VB 不同,C# 不会尝试自己使用 System.Linq.Xml

    VB 有 much fancier support对于随 InternalXmlHelper.vb 模块一起提供的 XML,您无法摆脱它并导致错误,因为它试图使用 System.Linq.Xml 命名空间。

    如果您使用例如,您也会在 C# 中遇到编译错误。 X元素。只需将 System.Xml.Linq.XElement x = null; 添加到 C# 代码就足以导致

    Error CS0433
    The type 'XElement' exists in both 'RestSharp.Net2, Version=102.7.0.0, Culture=neutral, PublicKeyToken=null' and 'System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'

  • 那我该怎么办?

    或者:

    • 切换到专为较新版本的 .NET Framework 设计的包版本,因此不会提供内置功能的冲突实现
    • 将您的项目降级到为该软件包设计的 FW 2.0

关于c# - “XElement”在命名空间中不明确 'System.Xml.Linq' 出现在 vb 项目中而不是在 C# 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49105451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com