Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何消除与相互引用的库和可执行文件的类型冲突?_C#_Types_Reference_Alias - Fatal编程技术网

C# 如何消除与相互引用的库和可执行文件的类型冲突?

C# 如何消除与相互引用的库和可执行文件的类型冲突?,c#,types,reference,alias,C#,Types,Reference,Alias,我有两个不同的文件,Foo1.exe和Foo2.dll 当我尝试在Foo1.exe中使用Foo2.dll中声明的对象时,一切都按预期工作 当我尝试在Foo2.dll中使用Foo1.exe中声明的对象时,一切都会按预期进行编译 但是,当我尝试将对象从Foo1.exe传递到Foo2.dll时,Foo1.exe无法编译,因为它的类型与Foo2.dll中的对象冲突,该对象实际上并不存在,但刚刚从Foo1.exe引用 如何使Foo2.dll可以引用Foo1.exe,但在编译Foo1.exe时类型不会导致冲

我有两个不同的文件,Foo1.exe和Foo2.dll

当我尝试在Foo1.exe中使用Foo2.dll中声明的对象时,一切都按预期工作

当我尝试在Foo2.dll中使用Foo1.exe中声明的对象时,一切都会按预期进行编译

但是,当我尝试将对象从Foo1.exe传递到Foo2.dll时,Foo1.exe无法编译,因为它的类型与Foo2.dll中的对象冲突,该对象实际上并不存在,但刚刚从Foo1.exe引用

如何使Foo2.dll可以引用Foo1.exe,但在编译Foo1.exe时类型不会导致冲突

实际错误消息是
Foo1.cs中的类型Foo与Foo2.cs中导入的类型Foo冲突


谢谢你的帮助

您设法使Foo1.exe引用了不引用Foo1.exe的另一个Foo2.dll副本。因为C#编译器会阻止你做你想做的事情——那就是创建循环引用

因此,您甚至正在编译的事实是一种侥幸,您应该尝试另一种方法


您需要将Foo1.exe和Foo2.dll共有的类隔离到第三个程序集Foo3.dll中,该程序集由这两个程序集引用。那么Foo3.dll应该既不引用Foo1.exe也不引用Foo2.dll。

您已经设法让Foo1.exe引用了不引用Foo1.exe的Foo2.dll的另一个副本。因为C#编译器会阻止你做你想做的事情——那就是创建循环引用

因此,您甚至正在编译的事实是一种侥幸,您应该尝试另一种方法


您需要将Foo1.exe和Foo2.dll共有的类隔离到第三个程序集Foo3.dll中,该程序集由这两个程序集引用。那么Foo3.dll应该既不引用Foo1.exe也不引用Foo2.dll。

这可能是因为我对Foo1.exe做了一些黑客操作,导致了循环引用。如果我无法从Foo1.exe中删除类,但仍希望将对象从Foo1.exe传递到Foo2.dll而不发生冲突,该怎么办?这可能吗?换句话说,我可以对Foo2.dll做些什么来防止它引起循环引用吗?您可以在Foo2.dll中定义接口IFoo,然后让Foo2.dll中的方法接受IFoo而不是Foo。然后让Foo1.exe中的类Foo实现IFoo。这样一来,Foo2就只需要知道IFoo,不需要循环引用。除了我的hacky方法,我不认为我可以为Foo2.dll创建IFoo,这样Foo1.exe中的Foo就可以完美地实现它。有没有办法创建一个Foo接口,只需直接反映Foo中的所有内容,而无需将其准确地输入代码?谢谢不,不是真的。我想你已经意识到了用艰苦的方式来巩固的好处。短期内,您可能只想将Foo2.dll合并到主Foo1.exe项目中。从长远来看,你可能想重写。(可靠-)啊,谢谢你的回答!我将收集所有这些信息,并尝试对这个问题采取更坚实的方法。再次感谢!这可能是因为我对Foo1.exe做了一些黑客操作,导致了循环引用。如果我无法从Foo1.exe中删除类,但仍希望将对象从Foo1.exe传递到Foo2.dll而不发生冲突,该怎么办?这可能吗?换句话说,我可以对Foo2.dll做些什么来防止它引起循环引用吗?您可以在Foo2.dll中定义接口IFoo,然后让Foo2.dll中的方法接受IFoo而不是Foo。然后让Foo1.exe中的类Foo实现IFoo。这样一来,Foo2就只需要知道IFoo,不需要循环引用。除了我的hacky方法,我不认为我可以为Foo2.dll创建IFoo,这样Foo1.exe中的Foo就可以完美地实现它。有没有办法创建一个Foo接口,只需直接反映Foo中的所有内容,而无需将其准确地输入代码?谢谢不,不是真的。我想你已经意识到了用艰苦的方式来巩固的好处。短期内,您可能只想将Foo2.dll合并到主Foo1.exe项目中。从长远来看,你可能想重写。(可靠-)啊,谢谢你的回答!我将收集所有这些信息,并尝试对这个问题采取更坚实的方法。再次感谢!