是否可以摆脱这种Nuget Hell场景?

时间:2018-10-04 00:56:46

标签: c# azure nuget azure-functions nuget-package

我希望我的项目具有以下软件包

  • Microsoft.Azure.ServiceBus
  • Microsoft.Azure.WebJobs.Extensions
  • Microsoft.Azure.WebJobs.Extensions.Storage
  • Microsoft.Azure.WebJobs.ServiceBus
  • Microsoft.NET.Sdk.Functions
  • .NETStandard库
  • Newtonsoft.Json

现在我拥有最新版本

  • Microsoft.Azure.ServiceBus(3.1.1)
  • Microsoft.Azure.WebJobs.Extensions(3.0.0)
  • Microsoft.Azure.WebJobs.Extensions.Storage(3.0.0)
  • Microsoft.Azure.WebJobs.ServiceBus(v3.0.0-beta8)
  • Microsoft.NET.Sdk.Functions(1.0.22)
  • .NETStandard库(2.0.1)
  • Newtonsoft.Json(11.0.2)

具有以下WebJobs依赖项:

  • Microsoft.Azure.ServiceBus [无]
  • Microsoft.Azure.WebJobs.Extensions [Microsoft.Azure.WebJobs(> = 3.0.0)]
  • Microsoft.Azure.WebJobs.Extensions.Storage [Microsoft.Azure.WebJobs(> = 3.0.0)]
  • Microsoft.Azure.WebJobs.ServiceBus [Microsoft.Azure.WebJobs(= 2.2.0)]
  • Microsoft.NET.Sdk.Functions [Microsoft.Azure.WebJobs(> = 3.0.0 && <3.1.0)]
  • .NETStandard库[无]
  • Newtonsoft.Json [无]

有趣的是,即使版本要求明显冲突,Visual Studio也不会将其标记为问题(解决方案资源管理器中没有黄色三角形)。当我尝试构建Function App项目时,出现错误

  

严重性代码描述项目文件行抑制状态   错误System.IO.FileNotFoundException:无法加载文件或   程序集'Microsoft.Azure.WebJobs,Version = 3.0.0.0,Culture = neutral,   PublicKeyToken = null”或其依赖项之一。系统无法   查找指定的文件。文件名:“ Microsoft.Azure.WebJobs,   版本= 3.0.0.0,文化=中性,PublicKeyToken =空'   System.ModuleHandle.ResolveType(RuntimeModule模块,Int32 typeToken,   IntPtr * typeInstArgs,Int32 typeInstCount,IntPtr * methodInstArgs,   Int32 methodInstCount,ObjectHandleOnStack类型),位于   System.ModuleHandle.ResolveTypeHandleInternal(RuntimeModule模块,   Int32 typeToken,RuntimeTypeHandle [] typeInstantiationContext,   RuntimeTypeHandle [] methodInstantiationContext)位于   System.Reflection.RuntimeModule.ResolveType(Int32 metadataToken,   Type [] genericTypeArguments,Type [] genericMethodArguments)   System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord   caRecord,MetadataImport范围,Assembly和lastAptcaOkAssembly,   RuntimeModule装饰模块,MetadataToken装饰令牌,   RuntimeType attributeFilterType,布尔值mustBeInheritable,Object []   属性,IList派生属性,RuntimeType&attributeType,   IRuntimeMethodInfo&ctor,Boolean&ctorHasParameters,Boolean&   isVarArg)   System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeModule   装饰模块,Int32装饰元数据令牌,Int32 pcaCount,   RuntimeType attributeFilterType,布尔值mustBeInheritable,IList   namedAttributes,布尔值isDecoratedTargetSecurityTransparent),位于   System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeParameterInfo   参数,RuntimeType caType)位于   System.Attribute.InternalParamGetCustomAttributes(ParameterInfo参数,   类型类型,布尔值继承)   MakeFunctionJson.ParameterInfoExtensions.GetDisabledAttribute(ParameterInfo   parameterInfo)   System.Linq.Enumerable.WhereSelectArrayIterator 2.MoveNext() at System.Linq.Enumerable.WhereEnumerableIterator 1.MoveNext()位于   System.Linq.Enumerable.FirstOrDefault [TSource](IEnumerable 1 source)
at MakeFunctionJson.MethodInfoExtensions.GetDisabled(MethodInfo method) at MakeFunctionJson.MethodInfoExtensions.HasUnsuportedAttributes(MethodInfo method, String& error) at MakeFunctionJson.FunctionJsonConverter.<GenerateFunctions>d__9.MoveNext() at System.Collections.Generic.List
1..ctor(IEnumerable 1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable
1源)位于   MakeFunctionJson.FunctionJsonConverter.TryGenerateFunctionJsons()
  在MakeFunctionJson.FunctionJsonConverter.TryRun()

     

WRN:程序集绑定日志记录已关闭。启用程序集绑定   失败日志记录,设置注册表值   [HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)为1。注意:   与程序集绑定失败相关的一些性能损失   记录。要关闭此功能,请删除注册表值   [HKLM \ Software \ Microsoft \ Fusion!EnableLog]。

     

生成函数元数据时出错

以任何方式摆脱Nuget地狱,还是我不能使用所有这些软件包?我尝试查看以前的版本,似乎没有办法让他们所有人都同意WebJobs的版本。通常如何解决这些情况?

1 个答案:

答案 0 :(得分:1)

删除Microsoft.Azure.WebJobs.ServiceBus,新程序包现在称为Microsoft.Azure.WebJobs.Extensions.ServiceBus(3.0.0)。请参见v2函数中的package references

此外,Microsoft.NET.Sdk.Functions(1.0.22)包含Newtonsoft.Json(11.0.2)Microsoft.Azure.WebJobs.Extensions (3.0.0),无需单独安装它们。并且Microsoft.Azure.WebJobs.Extensions.ServiceBus(3.0.0)也包含Microsoft.Azure.ServiceBus(3.0.2),只要不需要最新版本,您也不需要安装它。

例如,您可以在VS中创建v2服务总线触发模板,而只需添加Microsoft.Azure.WebJobs.Extensions.Storage (3.0.0)即可实现目标。