visual studio solucion revirtiendo restaurar proyecto por para paquetes paquete ningun manager los error encuentra elemento declarado correctamente cambios admitido visual-studio-2010 visual-studio msbuild nuget

visual-studio-2010 - solucion - restaurar paquetes nuget visual studio 2015



Este proyecto hace referencia a los paquetes NuGet que faltan en esta computadora (14)

Tengo una aplicación MVC5 de ASP.NET que funcionó ayer y ahora recibo este error cuando intento construir:

Este proyecto hace referencia a los paquetes NuGet que faltan en esta computadora.

Tengo las dos opciones marcadas que permiten que nuget descargue e instale automáticamente los paquetes faltantes activados / activados. También he intentado eliminar todos los archivos en la carpeta de paquetes y luego pido que Nuget los vuelva a descargar. También cuando abro nuget y busco actualizaciones, dice que no hay que instalarlas. No puedo imaginar qué más hacer para ir más allá de este tema increíblemente molesto.


¿Es posible que los paquetes hayan sido restaurados a la carpeta incorrecta? Compruebe que las rutas en los archivos csproj son correctas.

Si son diferentes, podría deberse a que los paquetes se están restaurando en una ubicación diferente. Esto podría ser causado por un archivo NuGet.Config que se verifica al especificar un nodo como este:

<add key="repositoryPath" value="../../Packages" />

Los paquetes están siendo restaurados, los proyectos aún están buscando en la ubicación anterior.


Creé una carpeta llamada ''.nuget'' en la carpeta raíz de la solución. Luego agregué el archivo ''NuGet.Config'' en esta carpeta con el siguiente contenido

<?xml version="1.0" encoding="utf-8"?> <configuration> <solution> <add key="disableSourceControlIntegration" value="true" /> </solution> </configuration>

Luego creó el archivo ''.nuGet.targets'' como se muestra debajo de $ (MSBuildProjectDirectory) .. /

<!-- Enable the restore command to run before builds --> <RestorePackages Condition=" ''$(RestorePackages)'' == '''' ">false</RestorePackages> <!-- Property that enables building a package from a project --> <BuildPackage Condition=" ''$(BuildPackage)'' == '''' ">false</BuildPackage> <!-- Determines if package restore consent is required to restore packages --> <RequireRestoreConsent Condition=" ''$(RequireRestoreConsent)'' != ''false'' ">true</RequireRestoreConsent> <!-- Download NuGet.exe if it does not already exist --> <DownloadNuGetExe Condition=" ''$(DownloadNuGetExe)'' == '''' ">false</DownloadNuGetExe> </PropertyGroup> <ItemGroup Condition=" ''$(PackageSources)'' == '''' "> <!-- Package sources used to restore packages. By default will used the registered sources under %APPDATA%/NuGet/NuGet.Config --> <!-- <PackageSource Include="https://nuget.org/api/v2/" /> <PackageSource Include="https://my-nuget-source/nuget/" /> --> </ItemGroup> <PropertyGroup Condition=" ''$(OS)'' == ''Windows_NT''"> <!-- Windows specific commands --> <NuGetToolsPath>$([System.IO.Path]::Combine($(SolutionDir), ".nuget"))</NuGetToolsPath> <PackagesConfig>$([System.IO.Path]::Combine($(ProjectDir), "packages.config"))</PackagesConfig> <PackagesDir>$([System.IO.Path]::Combine($(SolutionDir), "packages"))</PackagesDir> </PropertyGroup> <PropertyGroup Condition=" ''$(OS)'' != ''Windows_NT''"> <!-- We need to launch nuget.exe with the mono command if we''re not on windows --> <NuGetToolsPath>$(SolutionDir).nuget</NuGetToolsPath> <PackagesConfig>packages.config</PackagesConfig> <PackagesDir>$(SolutionDir)packages</PackagesDir> </PropertyGroup> <PropertyGroup> <!-- NuGet command --> <NuGetExePath Condition=" ''$(NuGetExePath)'' == '''' ">$(NuGetToolsPath)/nuget.exe</NuGetExePath> <PackageSources Condition=" $(PackageSources) == '''' ">@(PackageSource)</PackageSources> <NuGetCommand Condition=" ''$(OS)'' == ''Windows_NT''">"$(NuGetExePath)"</NuGetCommand> <NuGetCommand Condition=" ''$(OS)'' != ''Windows_NT'' ">mono --runtime=v4.0.30319 $(NuGetExePath)</NuGetCommand> <PackageOutputDir Condition="$(PackageOutputDir) == ''''">$(TargetDir.Trim(''//'))</PackageOutputDir> <RequireConsentSwitch Condition=" $(RequireRestoreConsent) == ''true'' ">-RequireConsent</RequireConsentSwitch> <!-- Commands --> <RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(RequireConsentSwitch) -o "$(PackagesDir)"</RestoreCommand> <BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -p Configuration=$(Configuration) -o "$(PackageOutputDir)" -symbols</BuildCommand> <!-- Make the build depend on restore packages --> <BuildDependsOn Condition="$(RestorePackages) == ''true''"> RestorePackages; $(BuildDependsOn); </BuildDependsOn> <!-- Make the build depend on restore packages --> <BuildDependsOn Condition="$(BuildPackage) == ''true''"> $(BuildDependsOn); BuildPackage; </BuildDependsOn> </PropertyGroup> <Target Name="CheckPrerequisites"> <!-- Raise an error if we''re unable to locate nuget.exe --> <Error Condition="''$(DownloadNuGetExe)'' != ''true'' AND !Exists(''$(NuGetExePath)'')" Text="Unable to locate ''$(NuGetExePath)''" /> <SetEnvironmentVariable EnvKey="VisualStudioVersion" EnvValue="$(VisualStudioVersion)" Condition=" ''$(VisualStudioVersion)'' != '''' AND ''$(OS)'' == ''Windows_NT'' " /> <DownloadNuGet OutputFilename="$(NuGetExePath)" Condition=" ''$(DownloadNuGetExe)'' == ''true'' AND !Exists(''$(NuGetExePath)'')" /> </Target> <Target Name="RestorePackages" DependsOnTargets="CheckPrerequisites"> <Exec Command="$(RestoreCommand)" Condition="''$(OS)'' != ''Windows_NT'' And Exists(''$(PackagesConfig)'')" /> <Exec Command="$(RestoreCommand)" LogStandardErrorAsError="true" Condition="''$(OS)'' == ''Windows_NT'' And Exists(''$(PackagesConfig)'')" /> </Target> <Target Name="BuildPackage" DependsOnTargets="CheckPrerequisites"> <Exec Command="$(BuildCommand)" Condition=" ''$(OS)'' != ''Windows_NT'' " /> <Exec Command="$(BuildCommand)" LogStandardErrorAsError="true" Condition=" ''$(OS)'' == ''Windows_NT'' " /> </Target> <UsingTask TaskName="DownloadNuGet" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)/Microsoft.Build.Tasks.v4.0.dll"> <ParameterGroup> <OutputFilename ParameterType="System.String" Required="true" /> </ParameterGroup> <Task> <Reference Include="System.Core" /> <Using Namespace="System" /> <Using Namespace="System.IO" /> <Using Namespace="System.Net" /> <Using Namespace="Microsoft.Build.Framework" /> <Using Namespace="Microsoft.Build.Utilities" /> <Code Type="Fragment" Language="cs"> <![CDATA[ try { OutputFilename = Path.GetFullPath(OutputFilename); Log.LogMessage("Downloading latest version of NuGet.exe..."); WebClient webClient = new WebClient(); webClient.DownloadFile("https://nuget.org/nuget.exe", OutputFilename); return true; } catch (Exception ex) { Log.LogErrorFromException(ex); return false; } ]]> </Code> </Task> </UsingTask> <UsingTask TaskName="SetEnvironmentVariable" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)/Microsoft.Build.Tasks.v4.0.dll"> <ParameterGroup> <EnvKey ParameterType="System.String" Required="true" /> <EnvValue ParameterType="System.String" Required="true" /> </ParameterGroup> <Task> <Using Namespace="System" /> <Code Type="Fragment" Language="cs"> <![CDATA[ try { Environment.SetEnvironmentVariable(EnvKey, EnvValue, System.EnvironmentVariableTarget.Process); } catch { } ]]> </Code> </Task> </UsingTask>


Editar .sln y .csproj no siempre es tan fácil o deseable. Una vez que obtiene la lista de errores, puede ver qué proyectos faltan paquetes (también, el nodo Referencias generalmente indica que faltan ensamblajes a menos que los paquetes sean código fuente, recursos, imágenes o solo basados ​​en texto).

Eliminar y luego agregar los paquetes no es una buena idea a menos que use la última versión del paquete. De lo contrario prepárate para las sorpresas, no siempre agradables.

Si, por ejemplo, el paquete es EntityFramework, desde la galería de NuGet obtendrá la última versión, que en el momento de escribir este comentario es 6.1.3 .

Entonces, tal vez la forma más segura de manejar la situación es restaurar los paquetes faltantes uno por uno. Sí, un ejercicio un poco doloroso, pero perseguir errores sutiles debido a una versión diferente del paquete puede ser mucho más desagradable.

Habiendo dicho esto, y dejando que EntityFramework sea el paquete que falta, puede emitir el siguiente comando en la Consola de administrador de paquetes:

PM> Install-Package EntityFramework -Version 6.0.1

Esto instalará la versión correcta, que es 6.0.1 , que es la que se especifica en packages.config:

<?xml version="1.0" encoding="utf-8"?> <packages> <package id="EntityFramework" version="6.0.1" targetFramework="net451" /> </packages>


En mi caso tenía que ver con la versión Microsoft.Build.Bcl. La versión de mi paquete nuget era 1.0.21, pero los archivos de mi proyecto seguían apuntando a la versión 1.0.14

Así que cambié mis archivos .csproj de:

<Import Project="../../packages/Microsoft.Bcl.Build.1.0.14/tools/Microsoft.Bcl.Build.targets" Condition="Exists(''../../packages/Microsoft.Bcl.Build.1.0.14/tools/Microsoft.Bcl.Build.targets'')" /> <Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="''$(BclBuildImported)'' == ''''"> <Error Condition="!Exists(''../../packages/Microsoft.Bcl.Build.1.0.14/tools/Microsoft.Bcl.Build.targets'')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" /> <Error Condition="Exists(''../../packages/Microsoft.Bcl.Build.1.0.14/tools/Microsoft.Bcl.Build.targets'')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" /> </Target>

a:

<Import Project="../../packages/Microsoft.Bcl.Build.1.0.21/build/Microsoft.Bcl.Build.targets" Condition="Exists(''../../packages/Microsoft.Bcl.Build.1.0.21/build/Microsoft.Bcl.Build.targets'')" /> <Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="''$(BclBuildImported)'' == ''''"> <Error Condition="!Exists(''../../packages/Microsoft.Bcl.Build.1.0.21/build/Microsoft.Bcl.Build.targets'')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" /> <Error Condition="Exists(''../../packages/Microsoft.Bcl.Build.1.0.21/build/Microsoft.Bcl.Build.targets'')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />

Y la construcción estaba funcionando de nuevo.


En mi caso, sucedió después de mover la carpeta de mi solución de una ubicación a otra, reorganizarla un poco y, en el proceso, su estructura de carpetas relativa cambió.

Así que tuve que editar todas las entradas similares a la siguiente en mi archivo .csproj desde

<Import Project="../packages/Microsoft.Bcl.Build.1.0.14/tools/Microsoft.Bcl.Build.targets" Condition="Exists(''../packages/Microsoft.Bcl.Build.1.0.14/tools/Microsoft.Bcl.Build.targets'')" />

a

<Import Project="packages/Microsoft.Bcl.Build.1.0.14/tools/Microsoft.Bcl.Build.targets" Condition="Exists(''packages/Microsoft.Bcl.Build.1.0.14/tools/Microsoft.Bcl.Build.targets'')" />

(Tenga en cuenta el cambio de ../packages/ a packages/ . Puede ser una estructura relativa diferente en su caso, pero se le ocurre la idea).


En mi caso, tuve que eliminar lo siguiente del archivo .csproj:

<Import Project="$(SolutionDir)/.nuget/NuGet.targets" Condition="Exists(''$(SolutionDir)/.nuget/NuGet.targets'')" /> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <PropertyGroup> <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> </PropertyGroup> <Error Condition="!Exists(''$(SolutionDir)/.nuget/NuGet.targets'')" Text="$([System.String]::Format(''$(ErrorText)'', ''$(SolutionDir)/.nuget/NuGet.targets''))" /> </Target>

De hecho, en este fragmento puede ver de dónde viene el mensaje de error.

Estaba convirtiendo de MSBuild-Integrated Package Restore a Automatic Package Restore ( http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore )


Eso puede suceder cuando intentas eliminar postsharp de tu proyecto.

Asegúrate de eliminar las líneas que dijo Loren .


Estos son los pasos que utilicé para solucionar el problema:

Para agregar paquetes nuget a su solución:

  1. Haga clic derecho en el proyecto (no en la solución) al que desea hacer referencia a los paquetes nuget.
  2. Elija: Administrar paquetes de nuget
  3. En la ventana emergente, a la izquierda tiene tres opciones. Si elige En línea> Microsoft y .NET , podrá instalar el agrupador de paquetes Microsoft ASP.NET Web API 2.2 (o el paquete que necesite, el mío era este).
  4. Ahora haga clic derecho en su solución (no en el proyecto) y elija Habilitar restauración de paquete nuget . Esto hará que los paquetes se descarguen automáticamente en la compilación.

Para mí, funcionó cuando acabo de copiar una carpeta .nuget de una solución que funciona a la existente, ¡y mencioné su contenido!


Tuve el mismo problema cuando hago referencia a la biblioteca de clases en mi aplicación web MVC,

el problema fue la discrepancia entre el número de versión del paquete nuget entre dos proyectos.

ej: mi biblioteca de clases tenía log4net de 1.2.3 pero mi aplicación web tenía 1.2.6

corregir: solo asegúrese de que tanto el proyecto tenga el mismo número de versión referenciado.


Tuve el mismo problema. En mi caso, la instalación del paquete Microsoft.Bcl.Build solucionó el problema.


Una solución sería eliminar del archivo .csproj lo siguiente:

<Import Project="$(SolutionDir)/.nuget/NuGet.targets" Condition="Exists(''$(SolutionDir)/.nuget/NuGet.targets'')" /> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <PropertyGroup> <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> </PropertyGroup> <Error Condition="!Exists(''$(SolutionDir)/.nuget/NuGet.targets'')" Text="$([System.String]::Format(''$(ErrorText)'', ''$(SolutionDir)/.nuget/NuGet.targets''))" /> </Target>

¿Cómo?

  1. Haga clic derecho sobre el proyecto. Proyecto de descarga.
  2. Haga clic derecho sobre el proyecto. Editar csproj.
  3. Eliminar la parte del archivo. Salvar.
  4. Haga clic derecho sobre el proyecto. Proyecto de recarga.

Resuelvo fácilmente este problema haciendo clic derecho en mi solución y luego haciendo clic en la opción Habilitar restauración de paquetes NuGet

(PS: Asegúrese de tener la instalación de Nuget desde herramientas -> Extensiones y actualización -> Nuget Package Manager para Visual Studio 2013. Si no instala primero esta extensión)

Espero eso ayude.


Si está utilizando TFS

Elimine los archivos NuGet.exe y NuGet.targets de la carpeta .nuget de la solución. Asegúrese de que los archivos en sí también se eliminen del espacio de trabajo de la solución. Conserve el archivo NuGet.Config para continuar NuGet.Config la adición de paquetes al control de origen.

Edite cada archivo de proyecto (por ejemplo, .csproj, .vbproj) en la solución y elimine cualquier referencia al archivo NuGet.targets . Abra el (los) archivo (s) de proyecto en el editor de su elección y elimine la siguiente configuración:

<RestorePackages>true</RestorePackages> ... <Import Project="$(SolutionDir)/.nuget/nuget.targets" /> ... <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <PropertyGroup> <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> </PropertyGroup> <Error Condition="!Exists(''$(SolutionDir)/.nuget/NuGet.targets'')" Text="$([System.String]::Format(''$(ErrorText)'', ''$(SolutionDir)/.nuget/NuGet.targets''))" /> </Target>

Si no está utilizando TFS

Elimine la carpeta .nuget de su solución. Asegúrese de que la carpeta en sí también se elimine del espacio de trabajo de la solución.

Edite cada archivo de proyecto (por ejemplo, .csproj, .vbproj) en la solución y elimine cualquier referencia al archivo NuGet.targets . Abra el (los) archivo (s) de proyecto en el editor de su elección y elimine la siguiente configuración:

<RestorePackages>true</RestorePackages> ... <Import Project="$(SolutionDir)/.nuget/nuget.targets" /> ... <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <PropertyGroup> <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> </PropertyGroup> <Error Condition="!Exists(''$(SolutionDir)/.nuget/NuGet.targets'')" Text="$([System.String]::Format(''$(ErrorText)'', ''$(SolutionDir)/.nuget/NuGet.targets''))" /> </Target>

Referencia: Migración de soluciones integradas de MSBuild para usar la restauración automática de paquetes