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 的答案,但我添加到此列表中的任何内容似乎都不起作用,我总是返回“系统无法找到指定的文件”,如果我正确理解了文档,条目“*”应该加载所有内容,但似乎没有这样做

4

2 回答 2

4

我自己最终得到了答案,为了未来的读者,细节如下

IISManager->[[SITE_NAME]]->.NET Compilation->General->Assemblies 确实是执行此操作的正确位置,它不起作用,因为我输入了错误的 PublicKeyToken

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

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

于 2014-12-15T11:32:58.923 回答
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声明纯粹是为了让您作为开发人员的生活更轻松。

于 2014-12-12T18:24:53.390 回答