Msb3644 как исправить

Build errors on build servers suck. If it builds locally, why the hell doesn’t it build on the build server? Well there’s plenty of reasons for that, but as a .NET developer is usually means that something you have on your machine that came with your Visual Studio install isn’t installed on the build server. But you probably don’t want to install the full-blown VS on the build server, so the question now is: what bit do I need to install?

Build errors on build servers suck. If it builds locally, why the hell doesn’t it build on the build server? Well there’s plenty of reasons for that, but as a .NET developer is usually means that something you have on your machine that came with your Visual Studio install isn’t installed on the build server.
But you probably don’t want to install the full-blown VS on the build server, so the question now is: what bit do I need to install?

Recently I ran into the following build error on 1 specific build server (yep, not on another one, fun, fun, fun).

C:Program Files (x86)Microsoft Visual Studio2017BuildToolsMSBuild15.0binMicrosoft.Common.CurrentVersion.targets(1111, 5): error MSB3644: The reference assemblies for framework ".NETFramework,Version=v4.5.2" were not found. To resolve this, install the SDK or Targeting Pack for this framework version or retarget your application to a version of the framework for which you have the SDK or Targeting Pack installed. Note that assemblies will be resolved from the Global Assembly Cache (GAC) and will be used in place of reference assemblies. Therefore your assembly may not be correctly targeted for the framework you intend.

It clearly has something to do with a project which targets .NET framework v4.5.2.
The answer in fact is right there. You need to install a “targeting pack”.
But WTF is that thing and why do I need it?

Apparently having the .NET framework itself installed on your machine isn’t enough to be able to build a project if that project targets a specific version of the .NET framework. It makes sense as the .NET framework installation is actually the runtime, used to run .NET applications, not build them.
If you want to build apps against a specific version of the .NET framework, you need that targeting pack as well on your build machine. This is either your development box, which has VS on it, and thus the required targeting packs which come with the VS installation. Or this can be your build server, where you have to install the targeting packs as well.

You can check what targeting packs you already have on a machine by checking the sub-folders in “C:Program Files (x86)Reference AssembliesMicrosoftFramework.NETFramework
For each supported framework version, there’s a v<version number> folder there. In my case there was no v4.5.2 folder on that one machine.

So where do you find those targeting packs for the various .NET framework versions? Microsoft luckily compiled a nice list where you can find all the download links and instructions.
For the versions listed as “included in VS 2017”, you can see them all listed in the VS 2017 installer if you go to the “Individual components” tab.

Look at all those .NET targeting packs.

So a shortcut to install all the packs at once, is to grab the VS2017 installer and use that one. But you might want to disable all the IDE specific stuff you won’t need on the build server though.

0 / 0 / 0

Регистрация: 06.01.2013

Сообщений: 5

1

06.01.2013, 15:47. Показов 4151. Ответов 3


Здравствуйте.Возникла довольно-таки трудноисправимая ошибка в Visual Studio 2010 Ultimate!
Создаю проект — все нормально.Компилирую — все нормально.Но при построении выдается такое предупреждение:

Кликните здесь для просмотра всего текста

[03.01.2013 16:41:59] Maksim: Построение начато 03.01.2013 16:41:02.
C:WINDOWSMicrosoft.NETFrameworkv4.0.30319Micr osoft.Common.Targets(847,9): warning MSB3644: Справочная сборка для инфраструктуры «.NETFramework,Version=v4.0» не найдена. Чтобы исправить эту ошибку, установите SDK или пакет адресации для этой версии инфраструктуры, или измените целевую инфраструктуру приложения на версию, для которой установлен SDK или пакет адресации. Учтите, что сборки будут разрешены из глобального кэша сборок (GAC) и будут использоваться вместо справочных сборок. Поэтому они могут неправильно использовать выбранную инфраструктуру в качестве целевой.

фрэймворки 2.0 , 3.5 , 4.0 установлены.Получается что дело в самой программе Visual Studio… уже третий день ищу проблему.
P.S. когда выйдешь из самой программы,а потом запускаешь её и сам проект вот такое окошко появляется:
http://img23.binimage.org/ef/4d/f8/323342.jpg
Я извиняюсь,если написал не в тот раздел! Прошу помощи у тех,кто знает решение проблемы или встречался с ней.Заранее спасибо

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



16 / 16 / 5

Регистрация: 26.09.2012

Сообщений: 70

06.01.2013, 17:20

2



0



0 / 0 / 0

Регистрация: 06.01.2013

Сообщений: 5

06.01.2013, 18:28

 [ТС]

3

Да оно… только не понятно

Добавлено через 51 минуту
Никто не знает выхода из этой ситуации?Самое главное волнует то что фрэймворк 4.0.0 есть.Но при создании проекта только 2.0,3.5. а 4.0 нет!



0



16 / 16 / 5

Регистрация: 26.09.2012

Сообщений: 70

06.01.2013, 22:31

4

Цитата
Сообщение от MaksimZh
Посмотреть сообщение

Да оно… только не понятно

Добавлено через 51 минуту
Никто не знает выхода из этой ситуации?Самое главное волнует то что фрэймворк 4.0.0 есть.Но при создании проекта только 2.0,3.5. а 4.0 нет!

ну так там же написано решение. в общем смысле, у Вас не хватает сборок от 4го фреймворка. варианты решений — проверить установлен ли .net 4 full (лучше удалить и поставить заново). если не помогает — поставить 2012 студию/фреймворк 4 на виртуальную машину. утянуть оттуда папку примерно по такому пути (естественно учитывайте разрядность ОС): C:Program FilesReference AssembliesMicrosoftFramework.NETFrameworkv4.0 и кинуть ее на Ваш компьютер, после чего нужно выполнить команду аналогичную вот этой: msbuild -p:FrameworkPathOverride=»C:Program FilesReference AssembliesMicrosoftFramework.NETFrameworkv4.0″ . пути на свои подправьте. сам не сталкивался, но народу вроде помогает.

Добавлено через 4 минуты

Цитата
Сообщение от MaksimZh
Посмотреть сообщение

Да оно… только не понятно

Добавлено через 51 минуту
Никто не знает выхода из этой ситуации?Самое главное волнует то что фрэймворк 4.0.0 есть.Но при создании проекта только 2.0,3.5. а 4.0 нет!

а вот еще вариант:
скачать и установить по этой ссылке: http://www.microsoft.com/en-us… px?id=8279, а перед установкой обязательно проверить отметку для установки: .NET Development > Intellisense and Reference Assemblies.



1



Я получаю следующую ошибку осложнения MSB3644:

Ссылочные сборки для каркаса «.NETFramework, Version = v4.0» не найдены. Чтобы решить эту проблему, установите SDK или Targeting Pack для этой версии фреймворка или перенастроить приложение к версии рамки, для которой у вас есть SDK или пакет таргетинга. Обратите внимание, что сборки будут разрешены из Глобального кэш-памяти (GAC) и будет использоваться вместо контрольные сборки. Поэтому ваша сборка может быть неправильной предназначенные для рамки, которую вы планируете использовать.

Из того, что я читал здесь, это связано с сборками на моей машине, хранящимися в «Program Files», а не в «Program Files (x86)». Свойство FrameworkPathOverride на MSBuild может его исправить.

Я попытался добавить это свойство (FrameworkPathOverride) в csproj:

<Project Sdk="Microsoft.NET.Sdk">
  <Import Project="....toolscommon.props" />
  <PropertyGroup>
    <TargetFrameworks>net40;net45;netstandard1.2</TargetFrameworks>
    <GeneratePackageOnBuild>False</GeneratePackageOnBuild>
    <FrameworkPathOverride>C:Program Files (x86)Reference AssembliesMicrosoftFramework.NETFrameworkv4.0</FrameworkPathOverride>
  </PropertyGroup>
  <ItemGroup Condition=" '$(TargetFramework)' == 'net40' ">
    <Reference Include="System.Configuration" />
  </ItemGroup>
  <ItemGroup Condition=" '$(TargetFramework)' == 'net45' ">
    <Reference Include="System.Configuration" />
  </ItemGroup>
  <PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard1.2' ">
    <DefineConstants>$(DefineConstants);NETSTANDARD</DefineConstants>
  </PropertyGroup>
  <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard1.2' ">
  </ItemGroup>
</Project>

Эта ошибка затем исчезает, но все мои типы и пространства имен не могут быть разрешены, и я также получаю это предупреждение сборки:

MSB3270 Несоответствие между архитектурой процессора проект, построенный «AMD64», и процессорная архитектура Справка «C:WindowsMicrosoft.NETFrameworkv4.0.30319mscorlib.dll», «x86». Это несоответствие может привести к сбоям во время выполнения. Пожалуйста, подумайте об изменении целевую архитектуру процессора вашего проекта через Configuration Manager, чтобы согласовать архитектуры процессоров между вашим проектом и ссылками, или зависеть от ссылки с архитектурой процессора, которая соответствует целевому процессорную архитектуру вашего проекта.

После установки целевой платформы проекта на x86 предупреждение исчезает, но все же типы и пространства имен не могут быть разрешены.

У меня установлены все необходимые фреймворки:

введите описание изображения здесь

Я использую Visual Studio 2017 в Windows 10.

Вопрос:

При создании веб-проекта на компьютере, на котором не установлен SDK, вы получаете это предупреждение:

предупреждение MSB3644: эталонные сборки для фреймворка “.NETFramework, Version = v4.0” не найдены. Чтобы решить эту проблему, установите SDK или Targeting Pack для этой версии фреймворка или перенастроить приложение к версии рамки, для которой у вас есть SDK или пакет таргетинга. Обратите внимание, что сборки будут разрешены из Глобального кэш-памяти (GAC) и будет использоваться вместо контрольные сборки. Поэтому ваша сборка может быть неправильной предназначенные для рамки, которую вы планируете использовать.

Очевидно, что одним из способов избавиться от предупреждения является установка SDK. Однако в этом случае я просто хочу подавить это предупреждение (которое в большинстве случаев безопасно) от выхода сборки без изменения состояния машины любым другим способом.

Я попытался передать /p: NoWarn = 3644 в msbuild (на основе других сообщений типа как я могу подавить все предупреждения анализа компилятора и кода из msbuild в командной строке?), но это не повлияло.

Ответ №1

NoWarn применяется к предупреждениям компиляции, созданным задачами Csc и Vbc.

Предупреждения MSB * являются основными предупреждениями MSBuild.
Чтобы подавить предупреждение MSB3644, пропустите явный TargetFrameworkMoniker:

msbuild your.csproj /t:Rebuild /p:TargetFrameworkMoniker=".NETFramework,Version=v4.0"

Список возможных входов можно найти здесь.

v1.1.4322
v2.0.50727
Client
v4.0
v4.0.30319
.NET Framework, Version=v4.0, Profile=Client
.NET Framework, Version=v4.0
.NET Framework, Version=v4.0.1, Profile=Client
.NET Framework, Version=v4.0.1
.NET Framework, Version=v4.0.2, Profile=Client
.NET Framework, Version=v4.0.2
.NET Framework, Version=v4.0.3, Profile=Client
.NET Framework, Version=v4.0.3
.NET Framework, Version=v4.5

В MSBuild 4.5 есть новый флаг – IgnoreVersionForFrameworkReferences, который может пригодиться в этих предупреждениях.

Понравилась статья? Поделить с друзьями:
  • Msasn1 dll ошибка
  • Mssql raise error
  • Msado15 dll как исправить ошибку
  • Mssql error unable to connect using the connection information provided retry profile creation
  • Mssql error number 18456