我正在将旧的.dll重写为net.core(1.1.1),其中一个方法创建一个XmlDocument并通过XmlNamespaceManager定义命名空间:
var nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
这会在构建时抛出以下错误:
The type 'XmlNamespaceManager' exists in both 'System.Xml.ReaderWriter, Version=4.1.0.0, (...) and 'System.Xml, Version=4.0.0.0, ...
根据我发现的大多数帖子,System.Xml.ReaderWriter
是一个NuGet,我没有安装。我已尝试在XmlNamespaceManager
前加System.Xml
作为前缀,但这没有任何区别。
编辑:
这是csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<OutputType>exe</OutputType>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>netcoreapp1.1</TargetFramework>
<ApplicationIcon />
<OutputTypeEx>exe</OutputTypeEx>
<StartupObject />
</PropertyGroup>
<ItemGroup>
<Reference Include="System.Xml">
<HintPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2\System.Xml.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Folder Include="Properties\" />
</ItemGroup>
</Project>
编辑2:
问题似乎是,只要我添加对System.Xml.ReaderWriter
的引用,就会添加System.Xml
。为System.Xml
设置别名不起作用,我无法弄清楚如何为System.Xml.ReaderWriter
设置别名。
答案 0 :(得分:0)
问题是因为类存在于[相同(命名空间+类型名称)]并且无法解析您要使用的那个。
你应该使用别名dll,即Dll别名。在Visual Studio中,您可以查看dll属性,然后在别名列中提供别名。然后在代码中使用
引用该dllextern alias dllaliasname;
这应该摆脱构建错误。
看一下这个链接。
https://blogs.msdn.microsoft.com/ansonh/2006/09/27/extern-alias-walkthrough/
另外看看这个。