Вызов PipelineObjects завершается неудачей из-за исключения

В этой статье представлено решение для сбоя при вызове PipelineObjects из приложения.

Исходная версия продукта: BizTalk Server 2013, 2010
Исходный номер базы знаний: 2888774

Симптомы

При вызове сборки PipelineObjects из собственного приложения может возникнуть ошибка, как показано ниже:

System.Reflection.TargetInvocationException не был обработан
HResult=-2146232828
Message=Исключение вызвано целевым объектом вызова.
Source=mscorlib
Трассировка стека:
at System.RuntimeTypeHandle.CreateInstance(Тип RuntimeType, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached,
RuntimeMethodHandleInternal& ctor, Boolean&bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
в System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type, Boolean nonPublic)
в System.Activator.CreateInstance(тип)
на сайте Microsoft.Test.BizTalk.PipelineObjects.PipelineFactory.CreatePipelineFromType(Type pipelineType)
в MyTestApp.Program.Main(String[] args) в C:\MyTestApp\Program.cs:line 9
в System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
в System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
в System.Threading.ThreadHelper.ThreadStart_Context(состояние объекта)
в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, обратный вызов ContextCallback, состояние объекта)
в System.Threading.ThreadHelper.ThreadStart()
InnerException: System.InvalidCastException
HResult=-2147467262
Message=Не удается привести COM-объект типа "System.__ComObject" к типу интерфейса "Microsoft.BizTalk.Component.Interop.IComponentTypeInfo". Эта операция завершилась ошибкой, так как вызов QueryInterface в компоненте COM для интерфейса с IID "{custom IID}" произошел сбоем из-за следующей ошибки: не поддерживается такой интерфейс (исключение из HRESULT: 0x80004002 (E_NOINTERFACE)).
Source=Microsoft.BizTalk.Pipeline
Трассировка стека:
на Microsoft.BizTalk.PipelineOM.Pipeline.AddComponent(Stage stage, IBaseComponent realComponent)
на MyPipeline.MySendPipeline..ctor()

Причина

PipelineObjects.dll требует, чтобы приложение, вызывающее его, использовало политику активации среды выполнения Microsoft .NET Framework.

Решение

Измените файл app.config, вызывающий исполняемый файл PipelineObjects, чтобы добавить следующий элемент <startup>:

<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0" />
    </startup>
</configuration>

Дополнительная информация

PipelineObjects.dll — это средство, которое предоставляется пакетом SDK для BizTalk и находится в папке SDK\Utilities\PipelineTools .

Дополнительные сведения об элементе <startup> см. в разделе элемент < запуска>.