Параметр «Источник» задачи «MIDL». Несколько элементов не могут быть переданы в параметр типа «Microsoft.Build.Framework.ITaskItem» - PullRequest
1 голос
/ 20 июля 2010

Я пытаюсь перенести один из проектов ранее в VS2008 на VS2010.При сборке я получаю следующую ошибку

C: \ Program Files \ MSBuild \ Microsoft.Cpp \ v4.0 \ Microsoft.CppCommon.targets (317,7): ошибка MSB4094: "hdxBinding.idl; hdxBlinking.idl; HDXCommandObject.idl; hdxds.idl; HSCProcessStatus.idl; HSCSelectableWindow.idl "является недопустимым значением для параметра" Источник "задачи" MIDL ".Несколько элементов не могут быть переданы в параметр типа «Microsoft.Build.Framework.ITaskItem».

При нажатии на эту ошибку, я перехожу на строку Source = "@ (Midl)" внутри C: \ ProgramФайлы \ MSBuild \ Microsoft.Cpp \ v4.0 \ Microsoft.CppCommon.targets file

Фрагмент кода в файле Microsoft.CppCommon.targets:

<ItemGroup>
  <Midl Condition="'@(Midl)' != ''">
    <MinimalRebuildFromTracking   Condition="'$(BuildType)' != 'Build' or '$(ForceRebuild)' == 'true'">false</MinimalRebuildFromTracking>
  </Midl>
</ItemGroup>

<PropertyGroup>
  <MidlToolArchitecture Condition="'$(MidlToolArchitecture)' == ''">$(DefaultToolArchitecture)</MidlToolArchitecture>
</PropertyGroup>

<MIDL
  Condition                           ="'%(Midl.ExcludedFromBuild)'!='true'"
  Source                              ="@(Midl)"

  AdditionalIncludeDirectories        ="%(Midl.AdditionalIncludeDirectories)"
  AdditionalOptions                   ="%(Midl.AdditionalOptions)"
  ApplicationConfigurationMode        ="%(Midl.ApplicationConfigurationMode)"
  ClientStubFile                      ="%(Midl.ClientStubFile)"
  CPreprocessOptions                  ="%(Midl.CPreprocessOptions)"
  DefaultCharType                     ="%(Midl.DefaultCharType)"
  DllDataFileName                     ="%(Midl.DllDataFileName)"
  EnableErrorChecks                   ="%(Midl.EnableErrorChecks)"
  ErrorCheckAllocations               ="%(Midl.ErrorCheckAllocations)"
  ErrorCheckBounds                    ="%(Midl.ErrorCheckBounds)"
  ErrorCheckEnumRange                 ="%(Midl.ErrorCheckEnumRange)"
  ErrorCheckRefPointers               ="%(Midl.ErrorCheckRefPointers)"
  ErrorCheckStubData                  ="%(Midl.ErrorCheckStubData)"
  ExcludedInputPaths                  ="$(ExcludePath)"
  GenerateClientFiles                 ="%(Midl.GenerateClientFiles)"
  GenerateServerFiles                 ="%(Midl.GenerateServerFiles)"
  GenerateStublessProxies             ="%(Midl.GenerateStublessProxies)"
  GenerateTypeLibrary                 ="%(Midl.GenerateTypeLibrary)"
  HeaderFileName                      ="%(Midl.HeaderFileName)"
  IgnoreStandardIncludePath           ="%(Midl.IgnoreStandardIncludePath)"
  InterfaceIdentifierFileName         ="%(Midl.InterfaceIdentifierFileName)"
  LocaleID                            ="%(Midl.LocaleID)"
  MkTypLibCompatible                  ="%(Midl.MkTypLibCompatible)"
  OutputDirectory                     ="%(Midl.OutputDirectory)"
  PreprocessorDefinitions             ="%(Midl.PreprocessorDefinitions)"
  ProxyFileName                       ="%(Midl.ProxyFileName)"
  RedirectOutputAndErrors             ="%(Midl.RedirectOutputAndErrors)"
  ServerStubFile                      ="%(Midl.ServerStubFile)"
  StructMemberAlignment               ="%(Midl.StructMemberAlignment)"
  SuppressCompilerWarnings            ="%(Midl.SuppressCompilerWarnings)"
  SuppressStartupBanner               ="%(Midl.SuppressStartupBanner)"
  TargetEnvironment                   ="%(Midl.TargetEnvironment)"
  TypeLibFormat                       ="%(Midl.TypeLibFormat)"
  TypeLibraryName                     ="%(Midl.TypeLibraryName)"
  UndefinePreprocessorDefinitions     ="%(Midl.UndefinePreprocessorDefinitions)"
  ValidateAllParameters               ="%(Midl.ValidateAllParameters)"
  WarnAsError                         ="%(Midl.WarnAsError)"
  WarningLevel                        ="%(Midl.WarningLevel)"

  TrackerLogDirectory                 ="%(Midl.TrackerLogDirectory)"
  MinimalRebuildFromTracking          ="%(Midl.MinimalRebuildFromTracking)"
  ToolArchitecture                    ="$(MidlToolArchitecture)"
  TrackerFrameworkPath                ="$(MidlTrackerFrameworkPath)"
  TrackerSdkPath                      ="$(MidlTrackerSdkPath)"

  TLogReadFiles                       ="@(MIDLTLogReadFiles)"
  TLogWriteFiles                      ="@(MIDLTLogWriteFiles)"
  ToolExe                             ="$(MIDLToolExe)"
  ToolPath                            ="$(MIDLToolPath)"
  TrackFileAccess                     ="$(TrackFileAccess)"

  AcceptableNonZeroExitCodes          ="%(Midl.AcceptableNonZeroExitCodes)"
  YieldDuringToolExecution            ="$(MidlYieldDuringToolExecution)"
  >
</MIDL>

Может кто-нибудь, пожалуйста, скажите мне, что здесь происходит не так.Это сводит меня с ума !!!!!!

Ответы [ 5 ]

2 голосов
/ 14 февраля 2011

Я столкнулся с этой проблемой, пытаясь создать пример DataMonitor из TMG SDK с Visual Studio 2010. Проблема, о которой я могу сказать, состоит в том, что MIDL> Параметры вывода в проекте - файл заголовка, файл IID, файл прокси,и для библиотеки типов было установлено значение «DataMonitor ...», что заставляло эти параметры применяться ко всем включенным файлам IDL (а не только к сгенерированным проектом).

Изменение этих параметров для использования% (Filename)) вместо этого и проект построен нормально.

1 голос
/ 25 сентября 2012

Когда в проекте, который я конвертировал из VS 2008 в VS 2010, есть несколько файлов IDL, я получил эту ошибку. Так как один IDL у меня был включен в другой. Я отключил сборку включенного файла IDL, и это устранило эту ошибку.

1 голос
/ 26 июля 2010

У меня сегодня аналогичная ошибка в проекте, который я конвертирую в VS2010.У меня пока нет хорошего решения проблемы, но у меня есть обходной путь.В моем случае проект содержал 2 файла idl.Назовите их A.idl и B.idl.A.idl является основным idl для проекта.Включает Б. Идл.Полученная ошибка:

ошибка MSB4094: «A.idl; B.idl» является недопустимым значением для параметра «Источник» задачи «MIDL».Несколько элементов не могут быть переданы в параметр типа «Microsoft.Build.Framework.ITaskItem».

Похоже, что система сборки искала все файлы idl в проекте и сделала один вызов компилятора MIDL свсе они, хотя это обречено на провал.Я не знаю, почему VS2010 делает это, а более ранняя версия этого не делала (или, возможно, более ранние версии MIDL могли обрабатывать несколько входов).

Обходной путь: захватите аргументы MIDL со страницы командной строки MIDL проекта.свойства.Затем запустите MIDL вручную в окне командной строки VS2010, используя эти аргументы.В моем случае, поскольку A.idl включает B.idl, мне нужно было запустить только одну команду MIDL:

Параметры MIDL-параметров-копий-из-проекта A.IDL

Похоже,у вас есть несколько файлов idl в вашем проекте (hdxBinding.idl, hdxBlinking.idl и т. д.).Так что тот же трюк может сработать для вас.

Удачи

0 голосов
/ 17 октября 2012

Я тоже столкнулся с той же проблемой.Исправление было (очень запутанным) удалить пустое в файле vcxproj.У меня закончилось время, и я не понял, почему это помогает - определение не пустого HeaderFileName также решает проблему, другие пустые элементы не вызывают эту проблему (например, DllDataFileName).Если вы хотите воспроизвести ошибку или процесс моего исследования, просто создайте привет и добавьте два файла idl.Он должен работать.Однако, если вы добавите ItemGroupDefinition с Midl.HeaderFileName, он должен начать сбой.Одно из предположений состоит в том, что это как-то связано с пакетированием задач (рабочий пример вызывает задачу MIDL для каждого файла отдельно).

0 голосов
/ 06 января 2011

Эти ошибки возникают при миграции на VS2010, поскольку свойства файла .idl не переносятся с помощью переносчика VS2010.Я получил аналогичную ошибку и решил ее, вручную добавив эти параметры в VS2010.После этого вы сможете избавиться от этих ошибок сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...