我已经写在ASP.Net工作XML Web服务。 现在我需要引用某些组件趴在一个特定的文件夹如c:\NotMyCode
我不希望该文件夹中复制的dll /重复不计其数到我的bin文件夹。
我试图保持CopyLocal=false
在Web服务引用的组件。 在一个FileNotFound例外大会结束了。 当我切换到CopyLocal=true
,则引用的DLL文件复制到bin文件夹..和它的作品。
所以在这里我的问题是:我如何引用不在于我的bin文件夹或它下面的子文件夹组件? 我需要改变的地方一些安全策略文件? 我觉得我不是曾经想要做这样的事的第一人..所以我假设有人已经解决了这个问题。
(我试过冒充在IIS ASP.net配置面板管理员用户,但没有工作无论是。)
更新: 无法在GAC它安装要么 。 举一个比喻,这个Web服务是给简化视图给第三方应用程序如StarTeam中。 我不能(不应该有..不想..)该文件夹中复制所有的二进制文件bin文件夹或将其安装到GAC
按照MSDN文档 ,
应用程序的根目录以外引用的程序必须具有强名称和必须要么使用被安装在全局程序集缓存或指定的<codeBase>
元素。
因此,它可能会出现,你的运气了。 这是我想尝试:
- 创建NTFS结点你的应用程序的基本目录下指向包含共享代码的目录。 这是关键的一步。 例如,在应用程序根目录,运行
linkd SharedCode c:\NotMyCode
。 这使得<yourappbase>\SharedCode
实际上成为一个别名c:\NotMyCode
。 - 告诉ASP.NET探测在此路径组件,使用
<probing>
元素,引用结点SharedCode
。 由于这是在你的应用程序的基础,它应该工作。 另外,使用AppDomainSetup.PrivateBinPath设置用于探测集路径。
我很好奇,想看看这是否正常工作:-)
你总是可以使用: AppDomain.CurrentDomain.AssemblyResolve事件和呼叫
Assemly.Load(Path.Combine(@"c:\NotMyStuff",args.Name.Substring(0, args.Name.IndexOf(",")) + ".dll"))
见链接获取更多信息。
你总是可以把在GAC您引用的程序集,则该位置也没有什么关系。 或运行的Gacutil.exe:您可以通过拖动它到GAC(\ WINDOWS \装配C)安装该组件。
这篇文章可能会有所帮助。 它描述了“ 的大会载入最佳实践 。”
起初我还以为你可以使用<probing privatePath="bin\debug"/>
元素在web.config中的运行/ assemblyBinding,但探测只会让你的根目录下的子目录中指定。
我觉得你可以在代码中引用特定的程序集的路径为好。
AppDomain.CurrentDomain.AppendPrivatePath("C:\\NotMyCode");
这样做,在你的Global.asax的Application_Start应该做的伎俩。
文章来源: How do I reference assemblies outside the bin folder in an ASP.net application?