我有一个用C#编写的CLR dll表现得很奇怪(对我来说)。我使用permission_set = unsafe在SQL Server中成功创建了程序集,并创建了调用dll函数的SQL函数。当我在SQL Server中运行函数并且它到达查找环境变量的代码部分(系统和我的用户都存在环境变量)时,它的值为null。但是,如果我使用相同的代码,将其编译为可执行文件,然后在SQL Server(同一台计算机)之外运行它可以很好地找到环境变量。如果我删除环境变量部分,只是将值硬编码到DLL中,一切都按预期工作。注意:代码打开一个带有外部服务的套接字,即使在SQL Server中运行也可以这样做,所以我相信它不是DLL的权限问题。相关代码如下:
string propertiesFile = Environment.GetEnvironmentVariable(ENVIRONMENT_VARIABLE_NAME);
我在Windows 7计算机上使用带有SQL Server Management Studio版本12.0.2000.8的SQL Server Express,并且在创建环境变量后尝试重新启动SQL Server Management Studio。
感谢阅读!
答案 0 :(得分:1)
感谢artm指出目标的使用。当我将代码更改为:
string propertiesFile = Environment.GetEnvironmentVariable(ENVIRONMENT_VARIABLE_NAME, EnvironmentVariableTarget.Machine);
一切正常。