C# 智能感知中引起问题的双重引用

C# 智能感知中引起问题的双重引用,c#,.net,visual-studio,ilmerge,C#,.net,Visual Studio,Ilmerge,首先我解释我们当前的项目结构,然后是问题陈述 我有一个CRM插件项目,该项目引用了另一个服务项目。为了部署我正在使用ILMerge的项目,所以在编译插件项目时,它还将包含所有服务项目合同和模型。我也在同一个解决方案上创建了单元测试项目,我为服务项目编写了测试方法(通过参考服务项目)。所有测试方法都工作正常 现在我们改变了策略,在插件项目上进行单元测试,而不是在服务项目上。所以我删除了服务的引用并添加了插件的引用,所有的单元测试在运行时仍然通过。因为运行时程序集内部包含服务类属性和方法 但是在编辑

首先我解释我们当前的项目结构,然后是问题陈述

我有一个CRM插件项目,该项目引用了另一个服务项目。为了部署我正在使用ILMerge的项目,所以在编译插件项目时,它还将包含所有服务项目合同和模型。我也在同一个解决方案上创建了单元测试项目,我为服务项目编写了测试方法(通过参考服务项目)。所有测试方法都工作正常

现在我们改变了策略,在插件项目上进行单元测试,而不是在服务项目上。所以我删除了服务的引用并添加了插件的引用,所有的单元测试在运行时仍然通过。因为运行时程序集内部包含服务类属性和方法

但是在编辑单元测试时,我们失去了VisualStudio提供的intellisense帮助,因为我们没有直接引用服务项目,如果我尝试同时引用服务和插件,那么就会出现编译时错误,说这些类是通过插件存在的

在这里,我想使用intellisense来生成更好的代码,并且不希望出现双重引用问题


有人能帮我解决这个问题吗。终于找到了解决办法

所以你有了汇编
A,B
并将它们合并到
M'
A,B->M
)。然后是
Test
project,其中使用了A、B、M中的类型

  • 通过常规项目引用引用任何合并的程序集
    A
    B

  • 至于
    M
    assembly,我只引用了原始
    M.dll
    不包含
    A、B
    类型。该组件已投入使用 M/obj/$(配置名称)文件夹。(合并的
    M'
    程序集位于bin文件夹中)

    因此,在添加引用时,不要添加项目引用,而是浏览到../M/obj/Release/M.dll

  • 打开
    Test.csproj
    并查找

    <Reference Include="M">
      <HintPath>..\M\obj\Release\M.dll</HintPath>
    </Reference>
    
    
    ..\M\obj\Release\M.dll
    
    HintPath
    替换为
    。\M\obj\$(配置名称)\M.dll

  • 确保为解决方案指定生成顺序,以便
    Test
    取决于
    A、B、M

  • 我还尝试在合并到
    M
    时将
    A、B
    类型内部化(公共类型变为内部),但当您部署到CRM时,代理内容(即从OrganizationRequeset/Response继承的类,在使用方法时必须反序列化)必须是公共的。从内部化中排除这些类型会导致重复的类型错误

    若您只合并了测试项目中引用的
    M'
    ,它将解决另一个问题。如果您碰巧在
    Test
    项目中使用了
    A
    中定义的某个接口,并且您碰巧测试了
    C
    也使用此类型的功能。。。错误,它只是抱怨
    错误CS0012:类型“SomeType”是在未引用的程序集中定义的。必须添加对程序集的引用
    。我怀疑这是因为在
    Test
    项目中,您实际使用的是
    M'
    assembly中的类型,它与
    C
    assembly中使用的
    A
    中的接口不同