繁体   English   中英

Intellisense 中的双重参考导致问题

[英]Double Reference Causing Issues in Intellisense

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

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

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

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

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

有人可以帮忙吗

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

所以你有汇编A, B并将它们合并到M'A, B -> M )。 然后你有一个Test项目,你可以在其中使用 A、B、M 中的类型。

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

  2. 至于M组件,我只参考了不包含A, B类型的原始M.dll 该程序集被放入 M/ obj /$(ConfigurationName) 文件夹中。 (合并M'程序集在bin文件夹中)

    所以在添加引用的时候,不要添加项目引用,而是浏览到../M/obj/Release/M.dll

  3. 打开Test.csproj并找到

    <Reference Include="M"> <HintPath>..\M\obj\Release\M.dll</HintPath> </Reference>

    HintPath替换为..\M\obj\$(ConfigurationName)\M.dll

  4. 确保为解决方案指定构建顺序,以便Test依赖于A,B,M

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM