自2.6版本起,EPLAN API 程序集会进行影子复制,即在注册期间将其保存到一个临时文件夹中,并从那里加载。
影子复制技术的好处在于原始程序集不会被锁定,即使其他工作站正在使用这些程序集,新版本也可以通过网络共享进行分发。
此方法适用于插件(add-ons)和附加组件(add-ins)。
插件的整个 bin
目录及其子目录会被复制到用户应用程序漫游目录(%appdata%\EPLAN\ShadowCopyAssemblies\Process-ID\Addon-Name)中。
这意味着所有文件(*.dll 和 *.exe)以及所有 bin
子目录(语言子目录等)也会被复制。此操作在 EPLAN 启动并注册插件或从插件对话框手动注册插件时进行。
EPLAN 从影子目录而不是原始插件目录加载插件的程序集。这使得无需停止所有使用该插件的 EPLAN 实例即可更新插件。
当 EPLAN 启动或通过 API > Manage 选项加载附加组件时,该组件会被复制到影子目录(%appdata%\\EPLAN\\ShadowCopyAssemblies\\Process-ID\\
)中。
EPLAN 保留原始附加组件路径以进一步解析程序集。这意味着如果一个附加组件引用了原路径中的其他程序集,这些引用的程序集将被找到。
在解析之后,它们会被复制到影子目录。问题可能出在使用相对路径引用原始附加组件目录中的数据。
作为解决方案,创建了 IEplAddInShadowCopy
接口,该接口允许获取附加组件的原始路径。
此外,当解决方案中的多个附加组件/插件项目引用了具有相同命名空间和类名但不同版本的程序集时,可能会出现冲突。需要考虑以下场景:例如,如果在一个项目(Project1)中使用了版本1.0.0的“Write”库,而在另一个项目(Project2)中使用了版本2.0.0的“Write”库,这将导致解决方案中的不期望行为。
取决于你首先调用的是 Project1 还是 Project2,它将正确执行并引用正确的库。如果随后执行另一个项目,它将引用先前的库,即执行第一个版本。
为了解决这种行为,请为库版本分别签名。这样你可以随意使用不同版本的库。
签名为库提供了一个特定的密钥令牌或“强名称”,有助于区分这些库。
https://msdn.microsoft.com/en-us/library/ms404279(v=vs.110).aspx