.net 在不参考GAC的情况下开发

.net 在不参考GAC的情况下开发,.net,asp.net-mvc,visual-studio,gac,.net,Asp.net Mvc,Visual Studio,Gac,是否可以在Visual Studio中开发而不引用GAC中的程序集(核心.Net框架除外)?我想我是在问,是否可以对应用程序使用纯本地程序集 我们的buildserver/live/test环境除了.Net framework之外没有安装任何东西,所有引用的程序集(如MVC/Entity framework等)都包含在NuGet软件包存档中。开发机器需要安装MVC,VisualStudio才能正常工作。问题是,在将某个特定依赖项推送到buildserver之前,无法判断该依赖项是否会导致问题的解

是否可以在Visual Studio中开发而不引用GAC中的程序集(核心.Net框架除外)?我想我是在问,是否可以对应用程序使用纯本地程序集


我们的buildserver/live/test环境除了.Net framework之外没有安装任何东西,所有引用的程序集(如MVC/Entity framework等)都包含在NuGet软件包存档中。开发机器需要安装MVC,VisualStudio才能正常工作。问题是,在将某个特定依赖项推送到buildserver之前,无法判断该依赖项是否会导致问题的解决,因为开发机器通常会在GAC中找到它需要的东西。我还遇到过这样一种情况,即在我的开发机器上的GAC中发现了一个旧的、不正确的程序集版本,尽管后来的、正确的版本作为包的一部分被项目引用(buildserver使用)

您可以随时添加文件夹“Libs”和其他文件夹,并将所有Dll存储在其中。并确保引用指向该文件夹和dll,而不是GAC

这基本上意味着从项目中删除所有引用,然后再次手动将它们添加回特定位置


然后,您可以在源代码管理中跟踪这些dll。这样,所有这些文件都将被推送到构建服务器。

好吧,您可以随时添加一个文件夹“Libs”和其他文件,并将所有Dll存储在其中。并确保引用指向该文件夹和dll,而不是GAC

这基本上意味着从项目中删除所有引用,然后再次手动将它们添加回特定位置


然后,您可以在源代码管理中跟踪这些dll。通过这种方式,它们都将被推送到构建服务器。

解决方案是两个步骤

  • 删除(或重命名为不存在的内容)AssembleyFoldersEx注册表项下的路径。所以在我的Win7 64位机器上,它是

    HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node\Microsoft.NETFramework\v4.0.30319\AssemblyFoldersEx\ASP.NET MVC4(和网页)

  • 从GAC上拆下组件。在我的场景中,这是system.web.mvc和相关的程序集,基本上是安装在

    C:\ProgramFiles(x86)\Microsoft ASP.NET\ASP.NET MVC 4(和网页)

  • 按照此处的步骤执行此操作


    基本上,现在任何程序集如果不能通过其在项目文件中指定的位置进行解析(即,如果NuGet包的名称不正确),都将导致生成失败,与生成服务器失败的方式相同。MVC模板仍然在Visual Studio中工作

    解决方案是两步

  • 删除(或重命名为不存在的内容)AssembleyFoldersEx注册表项下的路径。所以在我的Win7 64位机器上,它是

    HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node\Microsoft.NETFramework\v4.0.30319\AssemblyFoldersEx\ASP.NET MVC4(和网页)

  • 从GAC上拆下组件。在我的场景中,这是system.web.mvc和相关的程序集,基本上是安装在

    C:\ProgramFiles(x86)\Microsoft ASP.NET\ASP.NET MVC 4(和网页)

  • 按照此处的步骤执行此操作


    基本上,现在任何程序集如果不能通过其在项目文件中指定的位置进行解析(即,如果NuGet包的名称不正确),都将导致生成失败,与生成服务器失败的方式相同。MVC模板仍能在Visual Studio中工作

    这正是您拥有构建/测试环境以清除类似错误的原因。我希望我的开发环境引用与构建相同的库,并且我可以在将其推送到构建服务器之前发现任何问题。这正是您拥有构建/测试环境的原因,为了消除这样的错误,我宁愿我的开发环境引用与构建相同的库,并且我可以在将其推送到构建服务器之前发现任何问题。这有点禁止使用NuGet包管理器,我希望避免使用它。我很确定web.config等中引用的程序集仍然会引用GAC,因为它们不使用项目引用,所以没有为什么说它禁止Nuget?默认情况下,NUget所做的是将DLL下载到/Packages/*。如果您愿意,可以将此文件夹包括在SCM中。就我所见,这与我现在拥有的没有任何不同,只是在每次安装软件包后,需要额外一步,即移动到lib文件夹。如果在定位本地程序集时出现问题,这仍然不会阻止开发机器从GAC解决问题。我想我这里真正的问题是,如果不将MVC安装到GAC中,就无法使用MVC进行开发,这意味着开发机器将永远不会与构建/测试等相同。更不用说作为MVC的一部分安装的程序集,GAC中的程序集将与添加到项目中的NuGet包中的程序集不匹配!因此,如果希望所有计算机都使用来自软件包的MVC库,请通过Nuget安装它,并在项目中指定引用路径以使用来自软件包文件夹的引用路径。如果在那里找不到,VS将自动尝试在GAC中找到它。我认为你无法改变这一点。您可以做的是,确保VS在Packages文件夹中找到它,并确保项目引用指向它NuGet package manager的问题在于,您安装的包与项目上的引用之间没有真正的联系。当版本升级时,这些很容易失去同步。例如,有人忘记提交升级包,或者引用仍然指向旧包。这只有在所有内容都发布时才会被发现。这有点禁止使用NuGet包管理器,我希望避免使用它。我很确定web.config等中引用的程序集仍然会