在我的C#解决方案中,我有一个名为A.Foo的汇编项目,B-PUBLIC.EXE依赖于此项目。它使用命名空间A.Foo。
在我的解决方案中,我还有一个副本项目(相同的源文件)的副本,该副本项目称为B.PRIVATE.EXE依赖的A.FooPrivate。它还使用命名空间A.Foo。
私有版本使用预处理程序定义“ PRIVATE”来包含一些公共版本中不可用的私有定义。
在我拥有的EXE中:
使用A.Foo;
当我编译时,我从B-PRIVATE.EXE收到错误消息“在未引用的程序集中定义了'Bar'类型。您必须添加对程序集A.Foo的引用”。是的,我没有引用程序集A.Foo,而是引用了A.FooPrivate,它公开了与A.Foo相同的数据类型和相同的名称空间。
为什么会出现此错误?
然后,我将A.FooPrivate的输出名称更改为A.Foo,并将其输出到其他文件夹“ Debug-Private”而不是“ Debug”。现在,它具有与公用版本A.Foo.dll相同的名称,但是位于另一个文件夹中。
以前的问题消失了,但是当我构建整个解决方案Debug / A.Foo.dll和Debug-Private / A.Foo.dll相同时,我现在遇到了一个新问题。
为什么它们相同?一种使用预处理器定义PRIVATE,另一种则不使用。
作为一个健全性检查,如果我仅构建B-PRIVATE.EXE而不是整个解决方案,则它使用A.FooPrivate,其中包含预期的私有定义。
Visual Studio2017。谢谢!
答案 0 :(得分:0)
我通过更改AssemblyInfo.cs解决了该问题:
// The following GUID is for the ID of the typelib if this project is exposed to COM
#if PRIVATE
[assembly: Guid("8E360062-8C2B-4312-94E8-6CB27FC810B0")]
#else
[assembly: Guid("bb00e017-fe81-4f7a-8613-4122a97b31b1")]
#endif
现在VS认为这两个程序集不同。