我在我当前的项目中创建了一个DAL,它是持久性无知的,并且有一个需要直接引用的契约dll,然后是我们的IoC容器要扫描的实现dll,以解析ORM特定的实现和映射。关联\实现合同dll中定义的接口和POC。我的愿望是将实现dll复制到[solution root] \ lib目录。我已经创建了一个包并将实现dll加载到content文件夹中,当安装包时,它们最终会出现在[project root] \ lib。
我的问题是如何让Nuget将我的实现dll复制到[solution root] \ lib?
答案 0 :(得分:1)
我发现了一种似乎可行的方法。
[solution dir]\lib
然后我可以为我的容器注册创建另一个包,这取决于我的dal包并使用类似的方法来设置我的IoC注册。所以我有
Company.Dal
Company.Dal.Ninject
Company.Dal.StructureMap
然后消费者将安装使用他们使用的相同容器的包,这将负责将所需的dll安装到[solution dir]\lib
并配置容器以使用这些dll。
赞成
缺点
修改强> @MrMVCMan,我继续创建了一篇博客文章,记录了我在这里的表现:http://www.ryanvice.net/nuget/creating-a-nuget-package-that-will-install-files-relative-to-the-solution/
答案 1 :(得分:1)
我已经创建了一个通用的nuget包来解决你的问题,但采用了不同的方法。不是将包复制到lib文件夹,而是将它们在构建时复制到构建输出文件夹。
您的nuspec文件可能如下所示:
<files>
<file src="output\Implementation.dll" target="output\Implementation.dll" />
<file src="lib\Implementation.Contract.dll" target="output\Implementation.Contract.dll" />
</files>
将此nuget包添加到Project中时,实现了.Conontract.dll get作为对项目的引用,但实现未添加到项目中。
有关完整示例,请阅读我的博客: http://www.baseclass.ch/blog/Lists/Beitraege/Post.aspx?ID=6&mobile=0