【发布时间】:2015-03-01 23:52:49
【问题描述】:
我不得不承认我对 ASP.NET vNext 如何处理依赖关系有点困惑。问题是我想将 Microsoft Sync Framework 与我在 ASP.NET 5 中实现的 API 一起使用。过去我曾经安装 the SDK,然后只引用适当的 dll。 vNext 似乎并非如此,因为它在依赖关系方面都是包驱动的。因此,我找到了 Microsoft.SyncFramework package on NuGet 并将其作为依赖项添加到我的 ASP.NET vNext 项目中:
"dependencies": {
"Microsoft.AspNet.Server.IIS": "1.0.0-beta1",
"Microsoft.AspNet.Diagnostics": "1.0.0-beta1",
"Microsoft.AspNet.Mvc": "6.0.0-beta1"
},
"frameworks": {
"aspnet50": {
"dependencies": {
"Microsoft.SyncFramework": "2.1.0.2"
}
},
"aspnetcore50": { }
}
当 VS 尝试恢复包时,会出现这个错误:
System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.Framework.Runtime.LibraryInformation..ctor(LibraryDescription description)
at Microsoft.Framework.Runtime.LibraryManager.<>c__DisplayClass2.<GetLibraryInfoThunk>b__7(LibraryDescription library)
at System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext()
at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
at Microsoft.Framework.Runtime.LibraryManager.EnsureInitialized()
at Microsoft.Framework.Runtime.LibraryManager.GetLibraryInformation(String name, String aspect)
at Microsoft.Framework.Runtime.ProjectExportProviderHelper.GetExportsRecursive(ICache cache, ILibraryManager manager, ILibraryExportProvider libraryExportProvider, ILibraryKey target, Boolean dependenciesOnly)
at Microsoft.Framework.Runtime.LibraryManager.<>c__DisplayClass0.<GetAllExports>b__1(CacheContext ctx)
at Microsoft.Framework.Runtime.CacheExtensions.<>c__DisplayClass0`1.<Get>b__1(CacheContext ctx)
at Microsoft.Framework.Runtime.Cache.CreateEntry(Object k, Func`2 acquire)
at Microsoft.Framework.Runtime.Cache.<>c__DisplayClass3.<AddEntry>b__4()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at System.Lazy`1.get_Value()
at Microsoft.Framework.Runtime.Cache.Get(Object key, Func`2 factory)
at Microsoft.Framework.Runtime.CacheExtensions.Get[T](ICache cache, Object key, Func`2 factory)
at Microsoft.Framework.Runtime.LibraryManager.GetAllExports(String name, String aspect)
at Microsoft.Framework.Runtime.LibraryManager.GetAllExports(String name)
at Microsoft.Framework.Runtime.ProjectMetadataProvider.GetProjectMetadata(String name)
at Microsoft.Framework.DesignTimeHost.ApplicationContext.Initialize(String appPath, String configuration, Boolean triggerBuildOutputs)
at Microsoft.Framework.DesignTimeHost.ApplicationContext.Calculate()
at Microsoft.Framework.DesignTimeHost.ApplicationContext.DoProcessLoop()
at Microsoft.Framework.DesignTimeHost.ApplicationContext.ProcessLoop(Object state)
因此,我没有包含该软件包。
关于如何解决这个问题的任何想法?
【问题讨论】:
-
我还没有机会使用 vNext 尝试我的同步框架 nuget 包,因为我没有 vNext 环境。但是,我可以检查一下,您是否尝试过使用包管理器控制台“install-package Microsoft.syncframework”安装包,您是否得到与通过 UI 相同的结果?
-
您是否尝试在“依赖项”而不是框架下列出依赖项?即:“依赖项”:{“Microsoft.AspNet.Server.IIS”:“1.0.0-beta1”,“Microsoft.AspNet.Diagnostics”:“1.0.0-beta1”,“Microsoft.AspNet.Mvc”:“ 6.0.0-beta1", "Microsoft.SyncFramework": "2.1.0.2" },
-
@Darrell 是的,我确实尝试了你提到的所有方法。部分问题是 vNext 不支持 NuGet 包中的 *.msi(安装包时不运行 ps1 文件),我们是否应该为 SyncFramework 创建另一个包,其中仅包含 dll(从 .msi 安装)?
-
嗯,那将是一个问题。我尝试创建一个只包含 dll 的包,但是如果同步框架 msi 也没有安装到开发人员机器上,那么同步框架程序集将不起作用 - 所以如果我们这样做,我们还必须添加警告开发人员仍然需要在他们的机器上安装同步框架 msi,否则将无法正常工作。包含 msi 的好处在于它为开发人员节省了额外的手动步骤。
-
我想不出任何其他方式,因为您无法在 vNext 中引用 dll - 依赖项只能通过 NuGet 处理..
标签: nuget dependency-management asp.net-core nuget-package-restore