BizTalk 2020运行Native格式测试时提示找不到Microsoft.BizTalk.TOM.resources
Microsoft.BizTalk.TOM.resources找不到的问题 问题场景
已安装带最新CU的BizTalk Server 2020,服务器搭配Visual Studio 2019,BizTalk解决方案构建正常,但运行Native(非XML)格式输入文件的映射单元测试时,抛出以下错误:
Message:
Test method LGSS.Unit4.APInvoices.Testing.Unit.Transforms.AP_10BOut_2_CanonoicalABWTransaction.Map_AP_10BOut_2_CanonicalABWTransaction threw exception:
System.IO.FileNotFoundException: Could not find file 'Microsoft.BizTalk.TOM.resources'.Stack Trace:
RuntimeAssembly.InternalGetSatelliteAssembly(String name, CultureInfo culture, Version version, Boolean throwOnFileNotFound, StackCrawlMark& stackMark)
ManifestBasedResourceGroveler.GetSatelliteAssembly(CultureInfo lookForCulture, StackCrawlMark& stackMark)
ManifestBasedResourceGroveler.GrovelForResourceSet(CultureInfo culture, Dictionary`2 localResourceSets, Boolean tryParents, Boolean createIfNotExists, StackCrawlMark& stackMark)
ResourceManager.InternalGetResourceSet(CultureInfo requestedCulture, Boolean createIfNotExists, Boolean tryParents, StackCrawlMark& stackMark)
ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents)
ResourceManager.GetString(String name, CultureInfo culture)
CXSDSchemaTree.GetResourceString(String strResource)
BTSMethods.IsStandardXML(Object SchemaObject)
CXSDSchemaTree.ValidateInstance(String strInstanceFilePath, OutputInstanceType inputType, String schemaClassName, ITOMErrorInfo[]& errValidationErrors, String& strXMLOutput)
TestMapHelper.ValidateNativeInputInstance(String inputInstanceFilename, String sourceSchemaClassName, String inputFilename, ITOMTree TOMTreeSrc)
TestableMapBase.TestMap(String inputInstanceFilename, InputInstanceType inputType, String outputInstanceFilename, OutputInstanceType outputType)
测试代码示例:
[TestMethod] [DeploymentItem(@"Transforms\NCC\InputFiles\AP_10BOut_2_CanonicalABWTransaction_input_1.txt")] [DeploymentItem(@"Transforms\NCC\ExpectedOutput\AP_10BOut_2_CanonicalABWTransaction_ExpectedOutput_1.xml")] public void Map_AP_10BOut_2_CanonicalABWTransaction() { string inputFile = "AP_10BOut_2_CanonicalABWTransaction_input_1.txt"; string outputFile = "actualOutput.xml"; InputInstanceType inputType = InputInstanceType.Native; OutputInstanceType outputType = OutputInstanceType.XML; TestableMapBase tmb = new LGSS.Unit4.APInvoices.Transforms.Canonical.NCC.AP_10BOut_2_CanonicalABWTransaction(); tmb.TestMap(inputFile, inputType, outputFile, outputType); Assert.IsTrue(File.Exists(outputFile), "Failed to generate output file.."); ////Create Xpaths for elements to be overwritten prior to compare List<XPathModification> xpaths = GetElementsToIgnore(); XmlMapperHelper.CompareMapOutputXmlMatchesExpectedXml(outputFile, "AP_10BOut_2_CanonicalABWTransaction_ExpectedOutput_1.xml", xpaths, _testContext); }
本地VS2019和DevOps管道(同一服务器代理)运行均报错,且Microsoft.BizTalk.TOM.dll已存在于GAC路径C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.BizTalk.TOM\v4.0_3.0.1.0__31bf3856ad364e35\Microsoft.BizTalk.TOM.dll。
解决方法
检查并部署卫星资源集到GAC
确认对应文化的Microsoft.BizTalk.TOM.resources.dll存在于GAC的文化子目录中,例如英文环境需存在路径:C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.BizTalk.TOM.resources\v4.0_3.0.1.0__31bf3856ad364e35\en\Microsoft.BizTalk.TOM.resources.dll
若缺失,从BizTalk安装介质或最新CU补丁包中提取对应资源文件,使用以下命令注册到GAC:gacutil /i Microsoft.BizTalk.TOM.resources.dll强制测试进程使用固定文化
在测试初始化方法中设置线程文化为不变文化,避免资源管理器尝试加载非默认文化的资源:[TestInitialize] public void TestInitialize() { System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture; System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.InvariantCulture; }验证测试项目的BizTalk引用配置
右键测试项目中的Microsoft.BizTalk.TOM引用→属性,将复制本地设置为False,确保运行时从GAC加载组件,而非本地副本。修复BizTalk Server安装
运行BizTalk Server 2020的修复安装程序,选择修复所有相关组件,确保资源文件被完整部署;之后重新应用最新CU补丁,补丁安装过程会修复缺失的资源文件。检查DevOps代理账户权限
确保DevOps构建代理运行的账户属于BizTalk Server Administrators组,或拥有访问GAC目录、BizTalk系统文件的足够权限,避免因权限不足导致资源文件无法加载。
内容的提问来源于stack exchange,提问作者Rob Bowman

