From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.



在LabVIEW中调用一个.NET程序集将该程序集复制到一个新的位置



主要软件:
主要软件版本: 8.2
主要软件修正版本: N/A
次要软件: LabVIEW Development Systems>>LabVIEW Full Development System, LabVIEW Development Systems>>LabVIEW Professional Development System

问题: 我尝试在LabVIEW中调用一个.NET程序集,该程序集引用了一个配置文件,其中LabVIEW VI,.NET程序集,和配置文件都存储在同一个目录下面。.NET程序集应当在它所在的目录中查找这个配置文件,但当我运行VI时,.NET程序集抛出一个异常,该错误显示,无法在C:\...\Local Settings\Application Data\assembly\dll2子目录中找到配置文件。我检查了这个目录,确认.NET程序集已经复制到那里。为什么会发生这种情况,我该怎样解决?

解答: 当LabVIEW调用.NET程序集时,将启用一个称为Shadow Copying的.NET特性。该特性启用后,.NET Framework会自动将DLL复制到一个临时目录,然后锁定资源并从该临时目录位置执行程序集,该临时目录位于\Local Settings\Application Data\assembly\dll2下。

设计Shadowing Copy这种特性目的在于,当运行一个.NET程序集的一个副本时,允许在该程序集上进行并行开发。这种特性也被用在标准的ASP.NET开发环境中。如果要在LabVIEW 2011或以后版本中禁用该特性,在LabVIEW目录下的LabVIEW.ini文件中添加AppDomainSetup_ShadowCopyFiles=False可以实现。对于以前版本的LabVIEW,您无法关闭该特性,但您可以在.NET程序集中执行Shadowing Copy,这样就可以在正确的目录下引用配置文件。

有两种方式来引用.NET程序集在硬盘中的位置,可以使用程序集中的Location属性和CodeBase属性,这两个属性都是隶属于System.Reflection名字空间的。Location属性引用的硬盘上的位置是正在被执行的DLL副本所在的位置,这个属性返回的是DLL的Shadow Copy所在的位置。您也可以使用程序集的Codebase属性来获取DLL在被复制之前所在的位置,这样您可以获取包含程序集配置文件的原始目录。

对于CodeBase属性和Location属性,以及LabVIEW中调用.NET程序集,更多信息请参阅下面的链接。

在LabVIEW 2011中,您可以使用.NET Assemblies in Memory对话框来确认LabVIEW加载程序集的位置。



相关链接: LabVIEW 2011 Help: Using .NET with LabVIEW
LabVIEW 2011 Help: .NET Assemblies in Memory Dialog Box
Developer Zone Tutorial: .NET Support in LabVIEW 7 Express
MSDN Library: Assembly.CodeBase Property
MSDN Library: Assembly.Location Property

附件:





报告日期: 04/13/2006
最近更新: 03/24/2013
文档编号: 3WCCHHUM