[英]Double Reference Causing Issues in Intellisense
首先我解释我们当前的项目结构,然后是问题陈述
我有一个 CRM 插件项目,该项目引用了另一个服务项目。 为了部署我使用 ILMerge 的项目,所以在编译插件项目时,它还将包含所有服务项目合同和模型。我也在同一个解决方案上创建了单元测试项目,我已经为服务项目编写了测试方法,(通过参考服务项目)。所有测试方法都工作正常
现在我们改变了策略,对插件项目而不是服务项目进行单元测试。 所以我删除了服务的引用并添加了插件的引用,所有的单元测试仍然在运行时通过。 因为在运行时程序集内部包含服务 class 属性和方法。
但是在编辑单元测试时,我们失去了 Visual Studio 的智能帮助,因为我们没有直接引用服务项目,如果我尝试同时引用服务和插件,则会出现编译时错误,说明这些类是通过插件存在的。
在这里,我想使用智能感知来制作更好的代码,并且也不想出现双重引用问题。
有人可以帮忙吗
我也有这个问题。 终于找到了解决办法。
所以你有汇编A, B
并将它们合并到M'
( A, B -> M
)。 然后你有一个Test
项目,你可以在其中使用 A、B、M 中的类型。
通过常规项目引用引用任何合并的程序集A
、 B
。
至于M
组件,我只参考了不包含A, B
类型的原始M.dll
。 该程序集被放入 M/ obj /$(ConfigurationName) 文件夹中。 (合并M'
程序集在bin文件夹中)
所以在添加引用的时候,不要添加项目引用,而是浏览到../M/obj/Release/M.dll
打开Test.csproj
并找到
<Reference Include="M"> <HintPath>..\M\obj\Release\M.dll</HintPath> </Reference>
将HintPath
替换为..\M\obj\$(ConfigurationName)\M.dll
确保为解决方案指定构建顺序,以便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.