我有.net c#项目有几个对外部DLL的引用,有些是我自己的核心程序集,有些是第三方(例如NewtownSoft.Json)。当我编译核心程序集时,已编译的DLL将被移动到本地目录(来自/ debug / bin),例如/ development / common / binaries。然后我的c#项目引用我的核心程序集,核心程序集将被复制到项目的输出目录中。
这是问题,DLL的先前版本是引用并从我不知道的地方复制到输出目录。不仅如此,项目中的DLL类资源管理器也不反映新的程序集。我甚至尝试过增加核心dll的版本,并在项目中引用的程序集上强制执行特定版本。
有什么想法吗?我在这里和谷歌研究过这个话题,但实际上并没有找到解决方案。如果已涵盖此主题,请通知。我正在编译3.5 .NET。
谢谢, 卡尔..
答案 0 :(得分:1)
将NuGet用于第三方依赖项。每个项目都指定它具有哪些依赖项,以及它使用哪些依赖项版本。在构建时,NuGet会为您获取所需的版本。
下载NuGet(如果您的VisualStudio版本尚未安装),请安装它,打开Package Manager Console
窗口,然后运行类似Install-Package Newtonsoft.Json
的内容。全部完成:))
作为替代方案,您可以使用granadaCoders方法,这在专用依赖关系管理工具(如NuGet或maven)之前是典型的。
通常的方法是设置解决方案的目录结构,如:
.\bin <-- if you're doing continuous integration then your most recently built
versions are placed in the bin folder
.\docs <-- docs is a home for any documentation related to the project
.\lib <-- lib is the root of all your third-party dependencies
.\lib\{packagename}\ <-- each package gets it's own folder, such as
Newtonsoft.Json. All projects reference the package
from here with a relative path. If you update the
third party assembly then all dependent projects get
the update.
.\src <-- src is the root of all your releasable source code
.\src\MySolution.sln <-- your Solution
.\src\AProject\ <-- each project gets its own folder in src for all its contents
.\test <-- test is the root for all your test projects (unit/integration/etc)
.\test\AProjectTests\ <-- each test project gets its own folder
答案 1 :(得分:0)
我远离这个世界:
将文件夹结构更改为:
.\MySolution.sln
.\MyFirstProject\MyFirstProject.csproj
.\MySecondProject\MySecondProject.csproj
.\MyThirdProject\MyThirdProject.csproj
.\MyOtherProject\SomeFolder\MyOtherProject.csproj
.\ThirdPartyReferences\
将所有引用的程序集放在“。\ ThirdPartyReferences \”中。 让所有csproj使用“.. \ ThirdPartyReferences \ MyCoolDll.dll”引用.dll (无论多少“......”你需要)
每个csproj必须使用与任何第三方引用相同的版本和起始位置。
答案 2 :(得分:0)
如果您的项目是WEB SITE
项目,而不是WEB APPLICATION
项目,这是完全不同的事情......那么这种行为是可以预期的。
基本上,在使用Web Site
项目时,如果Visual Studio找到GAC
'd或任何搜索路径的版本,它将重做您的程序集引用。这绝对是令人抓狂的行为,我不知道为什么他们认为这是件好事。但我离题了。
为了阻止Visual Studio执行此操作,您有两个选择。将解决方案转换为Web应用程序项目(无论如何都应该使用)然后修复引用或从GAC
中拉出它引用的程序集。
说实话,我建议继续做两个解决方案。 GAC
组装只是一个坏主意,通常会导致大量不必要的行为。当然,我知道有些公司(Infragistics就是其中之一)建议在GAC中安装他们的垃圾。当您有多个应用程序依赖于不同版本(尤其是网站)并且一个应用程序得到更新时,问题就出现了......
答案 3 :(得分:0)
我在某个方面遇到了类似的问题并以这种方式解决了(我认为这是在VS2010中)。
看起来似乎很简单,但这个过程并没有让我失望。