6

我正在开发一个 silverlight C# 应用程序,我添加了对 Microsoft DLL 的引用并收到以下消息:

该类型存在于两个 DLL 中

因为我使用的是在两个 DLL 中定义的控件(一个与 SDK 相关联,另一个是我自己添加的)。

在网上做了一些研究后,我尝试为这两个 DLL 创建一个别名,并使用extern alias <alias_name>. 这种方法解决了后面xaml.cs代码中的一些问题,但并没有真正解决xaml中的问题。完成此操作后,Visual Studio 抱怨其中一个控件(来自我添加的 DLL)未在命名空间中定义。

所以我想知道是否有一种方法可以使用别名在 XML 中指定命名空间?

谢谢你。

4

2 回答 2

4

堆栈溢出

MSDN

您只需要使用逗号分隔符向您的程序集添加第二个别名。

例如

<Aliases>global,alias_name</Aliases>

XAML 将使用全局别名,您可以在您的类中进行选择。

.

如果您需要在一个地方使用这两个程序集,我认为这个解决方案是唯一的一个。

基本上,在您自己的项目中为每个必需的类在单独的命名空间中创建两个包装类,然后引用包装命名空间而不是冲突的程序集。

于 2012-08-01T18:11:54.593 回答
2

如果您在 C# 代码(不在 XAML 中)中使用重复命名空间中的类,那么有一个好方法 http://csc-technicalnotes.blogspot.ru/2009/07/type-exists-in-both-dlls.html

使用外部程序集别名。指定 DLL 引用的“别名”属性。

  1. 在 Visual Studio 解决方案资源管理器中,打开 References 文件夹。
  2. 右键单击 DLL 引用,选择属性
  3. 在“别名”属性中输入别名值。
  4. 示例:MyDLLv1.dll 引用的别名可能是“LegacyMyDLL”。

在 C# 源代码中指定别名:

// Old way
using MyNamespace;

// New way
extern alias LegacyMyDLL;
using LegacyMyDLL.MyNamespace;
于 2013-08-08T13:45:00.410 回答