2016-12-20 19 views
3

У меня есть проект WiX в Visual Studio 2010, который использует встроенную задачу MSBuild для установки переменной окружения в «BeforeBuild» Target. Пользовательская задача, ранее построенная без проблем; однако теперь я получаю ошибки в построении, даже несмотря на то, что проект/решение не изменилось вообще со времени последней успешной сборки. Фактически, тот же код строит правильно на другой машине разработчиков ...Невозможно создать встроенную задачу построения с помощью CodeTaskFactory (ошибка сборки MSB3758 и CS0012)

Если я строю проект из командной строки, он также строит правильно. Это заставляет меня думать, что среда VS 2010 может быть как-то испорчена?

С момента последнего строительства проекта я установил несколько программ (VS 2015, .NET Core и т. Д.). Будет ли ремонт VS 2010 вариантом? У меня установлен VS 2010 SP1.

Обычай задача определяется инлайн в файле проекта:

<!-- Define task to set environment variables for the current process --> 
<UsingTask TaskName="SetEnvironmentVariableTask" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v$(MSBuildToolsVersion).dll"> 
    <ParameterGroup> 
    <Name ParameterType="System.String" Required="true" /> 
    <Value ParameterType="System.String" Required="true" /> 
    </ParameterGroup> 
    <Task> 
    <Using Namespace="System" /> 
    <Code Type="Fragment" Language="cs"><![CDATA[ 
     Environment.SetEnvironmentVariable(Name, Value, EnvironmentVariableTarget.Process); 
    ]]></Code> 
    </Task> 
</UsingTask> 

И называется в, прежде чем строить цели:

<Target Name="BeforeBuild"> 
    <SetEnvironmentVariableTask Name="WIX_TEMP" Value="$(MSBuildProjectDirectory)\$(IntermediateOutputPath)" /> 
</Target> 

Ошибка сборки:

Initializing task factory "CodeTaskFactory" from assembly "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll".

error MSB3758: An error has occurred during compilation

error CS0012: The type 'Microsoft.Build.Framework.ITask' is defined in an assembly that is not referenced. You must add a reference to assembly 'Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

UPDATE 2017-01-19

Я попытался с помощью предложения Эмилио ниже; Однако, похоже, переменные MSBuild не быть установлен правильно (я использовал <Message> элемент для вывода их в процессе сборки):

MSBuildExtensionsPath = 'C:\Program Files (x86)\MSBuild'

MSBuildAssemblyVersion = ''

MSBuildToolsPath = 'C:\Windows\Microsoft.NET\Framework\v4.0.30319'

Кроме того, если Я смотрю в папке C:\Program Files (x86)\MSBuild, я вижу только подпапки для VS 2013 (12.0) и VS 2015 (14.0), а не для VS 2010 (10.0) ... Хотя я не уверен, что именно там VS 2010 будет устанавливать MSBuild материал?

+0

По вашему описанию, я создаю простой consoleApp демо с инлайн сборки задачи вы проводки с помощью Visual Studio 2010 sp1, он хорошо работает, пожалуйста, поделитесь простой демо с мог воспроизведите проблему через OneDrive .. –

+0

@ ColeWu-MSFT Как указано в вопросе, я знаю, что задача сборки компилируется нормально.По какой-то причине моя среда VS 2010 выглядит коррумпированной. Я попытаюсь восстановить VS 2010 ... –

+0

Вы разрешаете проблему после восстановления vs2010? если проблема все еще существует, пожалуйста, не стесняйтесь, дайте мне знать. Если проблема решена, отправьте ответ и отметьте его как ответ, это будет полезно для другого сообщества. –

ответ

0

Кажется, что установка VS2015 изменяет некоторые переменные MSBuild, которые вы используете (например, $ (MSBuildToolsPath)).

У меня была такая же проблема при использовании

<UsingTask TaskName="MyCustomTask" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll"> 

независимо от ToolsVersion, указанных в файле проекта.

Я закончил с использованием

<UsingTask TaskName="MyCustomTask" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildExtensionsPath)\$(MSBuildAssemblyVersion)\Bin\Microsoft.Build.Tasks.Core.dll"> 
+0

Хорошее предложение! Тем не менее, это не сработало для меня :(См. Мои изменения на вопрос. –

+0

Причина, по которой вам не хватает папки VS2010, заключается в том, что [MSBuild был частью Visual Studio только с версии 2013 года) (https: // blogs. msdn.microsoft.com/visualstudio/2013/07/24/msbuild-is-now-part-of-visual-studio/). Причина, по которой ваша MSBuildAssemblyVersion пуста, описана здесь [https://github.com/ Microsoft/msbuild/issues/52 # issuecomment-88674094) Думаю, вы можете попробовать установить 'ToolsVersion' в файле проекта на * 12.0 * и повторить попытку сборки в VS2015. Я не уверен, что произойдет, если вы Однако, постройте его в VS2010. –

+0

Отладка этих проблем проще, если вы откроете параметры Visual Studio и перейдите в раздел «Проекты и решения, построите и запустите» и установите «многословность сборки проекта MSBuild» в ** Diagnostic **. ваш проект, посмотрите на начало того, что написано в окне вывода. Вы увидите все различные переменные MSBuild и ir. –