NuGet Hint Path问题与多个解决方案的共享项目

时间:2015-03-25 09:53:21

标签: .net build nuget-package

我有四个解决方案,第一个解决方案(让我们称之为常见)有一些我想要分享的常见项目。我已经将其他三个解决方案(我们称之为A,B,C)从普通解决方案中添加了。其中一个常见项目实现了实体框架nu get包,我通过“管理解决方案包”添加了它。

当我将这个项目添加到A,B或C时,该解决方案无法编译,因为它无法找到实体框架DLL的参考,我必须删除该包并通过“管理解决方案包”重新添加它,它会工作。但是,除非我对它们执行相同的操作,否则其他解决方案将无法构建,这将撤消第一个解决方案上的映射。这不是太糟糕,但三个解决方案中的两个将通过自动构建失败,并显示无法解析程序包的错误。

我想要实现的是如何能够在不必每次都重新安装此软件包的情况下编译解决方案A,B,C,如果可能的话,将其保存为更新的nu get包?

希望这是有道理的。

2 个答案:

答案 0 :(得分:0)

Install-Package RelativeHintPaths

答案 1 :(得分:0)

我们通过修改提示路径以通过python脚本使用$(SolutionDir)来解决此问题。 如果它可能经常更改,则可以自动执行此操作-也可以修改脚本以使用glob搜索所有csproj文件。 对于我们而言,此解决方案更为可取,因为构建服务器无需进行任何修改,并且我们仅通过解决方案文件进行构建,而不是直接使用csproj

进行构建
import glob, os, re

def Main():
    print 'Fixing Nuget Package References'
    files = [
        r'..\Common\Common.Auth\Common.Auth.csproj',
        r'..\Common\Common.Core\Common.Core.csproj',
    ]
    for file in files: ProcessFile(file)

def ProcessFile(path):
    print 'processing ' + path
    text = ''
    with open(path) as f: text = f.read()
    updated = re.sub(r"<HintPath>(?:(?!\\packages)(?:.|\n))*\\packages", r"<HintPath>$(SolutionDir)\packages", text)
    if (text == updated): return #no update requried
    with open(path, 'w') as f: f.write(updated) 

if __name__ == "__main__":
    Main()