将程序集引用添加到已部署的ASP.NET网站

4
我正在尝试查找在运行于IIS的ASP.NET网站中,程序集引用实际上是如何显示在部署文件结构中的。这是一个理解Visual Studio背后实际操作的练习。
我选择的测试对象是System.IO.Compression.FileSystem程序集,因为它似乎不会在ASP.NET项目中默认引用(即使对应命名空间System.IO.Compression的using语句在文件中),尝试使用其组件总是会导致“您是否缺少程序集引用?”的错误。
因此,我有一些小样本代码,试图在IIS服务器上使用此程序集,并希望在不打开Visual Studio的情况下添加引用到部署中。
我认为通过IISManager->[[SITE_NAME]]->.NET Compilation->General->Assemblies可以非常接近答案,但是我添加到此列表中的任何内容都似乎无效,我总是收到“系统找不到指定的文件”的错误。如果我正确地理解了文档,条目“*”应该加载所有内容,但似乎并没有这样做。
2个回答

4

最终我自己找到了答案,以下是详细信息,有益于以后的读者。

IISManager->[[SITE_NAME]]->.NET Compilation->General->Assemblies 是正确的位置,之前无法运行是因为我打错了PublicKeyToken。

您也可以在站点主要的web.config文件中的 configuration->system.web->compilation->assemblies 中找到程序集列表。

您需要在Windows/Microsoft.NET/assembly中找到您想引用的GAC程序集,并打开它的文件夹。里面会有另一个以版本和密钥命名的文件夹,您需要将其放入其中。


0

当你提到引用和using语句时,你正在混淆两件不同的事情。

引用是由你的程序集指向的程序集。如果你使用反编译器(比如Telerik JustDecompile),你可以看到在Visual Studio中设置为引用的程序集列表。

'using'语句是一种代码快捷方式,允许你引用类而不必完全限定它们。如果你添加了(例如在MVC项目中)using System.Web.Mvc;,你可以这样写:

public ActionResult Index()
{
    throw new NotImplementedException();
}

没有 using 语句,你需要编写以下代码:
public System.Web.Mvc.ActionResult Index()
{
    throw new NotImplementedException();
}

以上两种写法编译后会得到相同的字节码;using语句只是为了让开发者的生活更加便捷。


1
我理解这种差异,我只是想知道引用在 ASP.NET 网站部署后(远离 Visual Studio)如何显现。Visual Studio 不能直接影响 ASP.NET 站点的编译,因为这由 IIS 或同等软件处理,所以它是如何通知服务器在编译中包含另一个程序集的呢? - user3498178

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接