我在尝试使用由源引用的Unity的Prism4 Bootstrapper时遇到错误(将现有项目包含在解决方案中)。我从源代码构建Unity然后包含输出文件也会出错。
以下是详细信息:
我有一个使用Prism4的项目。 Prism的Bootstrapper组件依赖于Unity 2.0。对我来说更精确,他们依赖于版本2.0.414.0的统一。
如果我尝试将当前或更新版本的Prism包含在我的项目中作为prism 4,那么VS会给我一条消息,生成一些强制加载最新程序集的app.config代码。
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-2.1.505.0" newVersion="2.1.505.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-2.1.505.0" newVersion="2.1.505.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
使用Unity 2.0和Unity 2.1的预构建的dll文件时,这没有问题......
但是,如果我尝试从源代码构建这些并使用新的DLL,或者将项目直接包含到我的项目中,我总会收到错误:
The type 'Microsoft.Practices.Unity.IUnityContainer' is defined in an assembly that is not referenced. You must add a reference to assembly 'Microsoft.Practices.Unity, Version=2.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.
请注意Unity 2.0 [b] IS [/ b]版本2.0.414.0。所以我的第一次尝试是使用unity 2.0源代码库。我还使用此版本进行了许多后续尝试,包括从一个新项目开始。我已经尝试通过预先构建的bin文件,源代码和自定义构建的dll来包含Prism,结果相同。我也尝试过使用Unity 2.1的所有相同的东西,希望它可以工作。
我的环境是MSVC#2010 win7 x64。我在x86和任何CPU配置下构建,以及调试和发布。唯一的依赖是Prism和Unity。
答案 0 :(得分:0)
找到了解决方法。
我打开了Prism源的解决方案并删除了对unity的任何引用。然后我将Unity项目作为现有项目添加到棱镜解决方案中。最后,我将团结作为所有相关棱镜项目的项目。因此,我将用于我的项目的统一dll正由prism unityextensions输出。
稍后会对某些批处理文件进行更新,这是一种解决方法。
不是最好的解决方案,但我已准备好继续前进。
P.S。主题行不正确。 UnityExtensions在棱镜中是一个问题,而不是模块化问题。当我把它称为“
时,我还不清楚UnityBootstrapper