双重引用导致智能感知中的问题



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

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

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

但是在编辑单元测试时,我们失去了Visual Studio的智能感知帮助,因为我们没有直接引用服务项目,如果我尝试同时引用服务和插件,那么编译时错误说这些类通过插件存在。

在这里,我想使用智能感知来制作更好的代码,并且也不想出现双重引用问题。

有人可以帮忙吗

我也有这个问题。终于找到了解决办法。

所以你有组装A, B并将它们合并到M'(A, B -> M(。然后你有一个项目Test你使用来自 A,B,M 的类型。

引用
  1. 任何合并的程序集AB通过常规项目引用。

  2. 至于M组装,我只参考原始M.dll不包含A, B类型。此组件放入 M/obj/$(配置名称( 文件夹。(合并M'程序集位于bin文件夹中(

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

  3. 打开Test.csproj并查找

    <Reference Include="M">
    <HintPath>..MobjReleaseM.dll</HintPath>
    </Reference>
    

    HintPath替换为..Mobj$(ConfigurationName)M.dll

  4. 请确保指定解决方案的生成顺序,以便Test取决于A,B,M

在合并到M时,我还尝试内化A, B类型(公共类型成为内部类型(,但是当您部署到CRM时,代理的东西(即从OrganizationRequset/Response继承的类,在使用Execute方法时必须反序列化(必须是公共的。从内部化中排除这些类型会回到重复的类型错误。

如果您只在测试项目中合并M'引用,它解决了另一个问题。如果您碰巧在项目中使用了A中定义的Test某个接口,并且碰巧测试了也使用此类型的C功能...错误,它只是抱怨error CS0012: The type 'SomeType' is defined in an assembly that is not referenced. You must add a reference to assembly.我怀疑这是因为Test项目中您实际上使用的是程序集M'类型,它不等同于程序集中使用的AC接口。

最新更新