是这样的。我写的一个小程序,为了保持这个程序的绿色特征,只生成了一个可执行文件。但我的程序引用了其他程序的托管dll。比如在c:\abc\ 下的托管dll。我发现我的程序只有在c:\abc\下才能正常运行,否则报错:System.IO.FileNotFoundException: 未能加载文件或程序集(我引用的dll名)。但c:\abc\的目录是在系统PATH变量里的。我想问,托管dll的搜索范围不像win32dll那样的顺序么?当前目录,系统目录,path变量目录下?如果别人把我所依赖的软件装到其他目录下,比如D:\cba\(但这个目录也在path变量里)。我该怎么做?程序的属性设置里,引用路径的具体作用是什么?看msdn没看明白。谢谢
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="人事管理系统.Properties.Settings.PersionAdminConnectionString" connectionString="Data Source=.;Initial Catalog=PersionAdmin;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
<appSettings>
<add key="Splitter" value="1" />
<!--0表示锁定拆分器,1表示未锁定-->
<add key="BackImag" value="1" />
<!--0表示不加载图片,1表示加载图片-->
<add key="serverExpress" value="MSSQL$SQLEXPRESS" />
<add key="serverSQL" value="MSSQLSERVER" />
<add key="connectSQLServer" value="data source=.;Initial Catalog=PersionAdmin;Integrated Security=true" />
</appSettings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="Query;Add;Count;Del;Edit;change" />
</assemblyBinding>
</runtime>
</configuration>
最近正好做项目遇到这个问题,解决方案是看我给的代码里的红色部分。probing privatePath="Query;Add;Count;Del;Edit;change"这里引号中的内容替换成你的目录名。
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="Query;Add;Count;Del;Edit;change" />
</assemblyBinding>
</runtime>
我不是说了另外一个办法了么,注册到GAC中。
我所引用的dll是别人应用程序的,并且该dll还有很多依赖dll。并且这些dll都没有强名称。貌似不能加到gac。我看了你的连接。我就纳闷,不能像win32那样方便么?现在path变量成摆设了?