2010-07-20 1 views
1

Я пытаюсь перенести один из проектов ранее в VS2008 на VS2010. При построении я получаю следующую ошибку:Параметр «Источник» задачи «MIDL». Несколько элементов не могут быть переданы в параметр типа «Microsoft.Build.Framework.ITaskItem»

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 = "@ (Мидл)" в C: файл \ Program Files \ MSBuild \ Microsoft.Cpp \ v4.0 \ Microsoft.CppCommon.targets

фрагмент кода в 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> 

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

ответ

1

Получил аналогичную ошибку сегодня в проекте, который я преобразовываю в VS2010. У меня пока нет хорошего решения проблемы, но у меня есть обходное решение. В моем случае проект содержал 2 файла idl. Назовите их A.idl и B.idl. A.idl является основным idl для проекта. Он включает в себя B.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

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

2

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

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

+0

спасибо! работает для меня на MSVC10 – tuxSlayer

1

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

0

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