Ответ 1
Существует уродливый способ устранить проблему: переименование папки "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A"
. Я ненавижу принимать этот ответ.
Я столкнулся с проблемами компиляции с MSVS 10 после установки MSVS 11Beta. Теперь, когда я скомпилирую свои проекты С# в MSVS 10 (Проекты, созданные в MSVS 10, Target framework: 3.5), я получаю ошибки MSB4216
, MSB4028
со следующим текстом в окне вывода:
1>Task "GenerateResource" skipped, due to false condition; ('%(EmbeddedResource.Type)' == 'Resx' and '%(EmbeddedResource.GenerateResource)' != 'false' and '$(GenerateResourceMSBuildRuntime)' != 'CLR2') was evaluated as ('Resx' == 'Resx' and '' != 'false' and 'CLR2' != 'CLR2').
1>Task "GenerateResource"
1> Launching task "GenerateResource" from assembly "Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" in an external task host with a runtime of "CLR2" and a process architecture of "x86".
1>C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(2199,5): error MSB4216: Could not run the "GenerateResource" task because we could not create or connect to a task host with runtime "CLR2" and architecture "x86". Please ensure that (1) the requested runtime and/or architecture are available on the machine, and (2) that the required executable "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NetFX 4.0 Tools\MSBuildTaskHost.exe" exists.
1>C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(2217,7): error MSB4028: The "GenerateResource" task outputs could not be retrieved from the "FilesWritten" parameter. Object does not match target type.
1>Done executing task "GenerateResource" -- FAILED.
Как я могу исправить эти ошибки?
EDIT:
GenerateResource
, которая должна скомпилировать файл resx, но генерирует исключение:
<!-- But we can't use those parameters if we're targeting 3.5, since we're using the 3.5 task -->
<GenerateResource
Sources="@(EmbeddedResource)"
UseSourcePath="$(UseSourcePath)"
References="@(ReferencePath)"
AdditionalInputs="$(MSBuildAllProjects)"
NeverLockTypeAssemblies="$(GenerateResourceNeverLockTypeAssemblies)"
StateFile="$(IntermediateOutputPath)$(MSBuildProjectFile).GenerateResource.Cache"
StronglyTypedClassName="%(EmbeddedResource.StronglyTypedClassName)"
StronglyTypedFileName="%(EmbeddedResource.StronglyTypedFileName)"
StronglyTypedLanguage="%(EmbeddedResource.StronglyTypedLanguage)"
StronglyTypedNamespace="%(EmbeddedResource.StronglyTypedNamespace)"
StronglyTypedManifestPrefix="%(EmbeddedResource.StronglyTypedManifestPrefix)"
PublicClass="%(EmbeddedResource.PublicClass)"
OutputResources="@(EmbeddedResource->'$(IntermediateOutputPath)%(ManifestResourceName).resources')"
MSBuildRuntime="$(GenerateResourceMSBuildRuntime)"
MSBuildArchitecture="$(GenerateResourceMSBuildArchitecture)"
Condition="'%(EmbeddedResource.Type)' == 'Resx' and '%(EmbeddedResource.GenerateResource)' != 'false' and '$(GenerateResourceMSBuildRuntime)' == 'CLR2'">
.csproj
). Незадолго до фатальной задачи GenerateResource
я проверил все свойства и элементы. Не было ничего о "8.0A", но только о "7.0A" Существует уродливый способ устранить проблему: переименование папки "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A"
. Я ненавижу принимать этот ответ.
Как долго ваше имя пользователя?
Кажется, что есть ошибка, когда имя пользователя составляет 20 символов. Если ваше имя пользователя составляет 19 символов или меньше, он отлично работает.
Я открыл проблему на connect.
Edit:
Вы пытались установить переменную окружения DisableOutOfProcTaskHost
равной true, как это было предложено в проблеме подключения, которая сработала для меня.
Подобный запрос был задан на форумах MSDN. Вы перезагрузились после установки VS11?
http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/7d955d96-ff73-47d3-8830-85ea321eb4ab
Эта проблема возникла для меня на моем сервере сборки TFS 2010 после установки VS2010, а затем для установки .NET Framework 4.5. Это позволило мне создавать проекты .NET 4.5, но любой проект VS2008, ориентированный на CLR2 (.NET 2.0 -3.5), который я попытался построить, вернет ошибку. Ни одно из предложений на нескольких сайтах, говорящих об этой проблеме, не работало.
В любом случае, чтобы исправить это, я удалил .NET 4.5, отремонтировал VS2010, а затем перезагрузил сервер сборки. Теперь я могу создавать VS2008 и VS2010 проекты без проблем.
К счастью, мне больше не нужно создавать проекты .NET 4.5, так как команда решила вернуться к .NET 4.0.
Еще одно возможное решение - изменить целевую структуру ваших проектов на .Net 4.0. Это не всегда решение, но, безусловно, это возможность, если все остальное не удается.
Работала для меня: удаление папки bin и obj для проблемных папок и перезапуск решения
В моем случае я получил это сообщение об ошибке при попытке создать решение на 32-разрядной машине Windows 7. Способ устранения ошибки для меня состоял в том, чтобы щелкнуть правой кнопкой мыши по проекту, выбрать свойства, а затем перейти на вкладку "Сборка". Здесь я изменил "Цель платформы" с "Любой процессор" на "x86". НТН
Настройка DisableOutOfProcTaskHost = true
в переменной окружения, работающей для меня.