visual studio solucion restaurar para paquetes nuggets microsoft consola administrar administrador windows visual-studio nuget 64bit chocolatey

windows - studio - nuget microsoft



¿Cómo debo crear o subir un paquete NuGet de 32 y 64 bits? (3)

Hemos estado discussing un problema similar en el Chocolatey Google Group . No hay ninguna semántica integrada en NuGet. El requisito no sería, en qué arquitectura de procesador se está ejecutando . Tendría que ser a qué arquitectura de procesador se dirige su proyecto. Y luego eso complica las cosas ... también tendrías que entender AnyCPU .

Creo que por ahora, subiré dos paquetes. Siempre puedo publicar uno combinado cuando arreglo un install.ps1 que puede manejar la consulta del objetivo del proyecto.

mypackage.x86 mypackage.x64

Tengo una versión x86 y x64 de un archivo binario que quiero subir a NuGet. ¿Cuál es la recomendación o el método requerido para crear / cargar ese paquete? No puedo encontrar mucho en lo que basar mi decisión. Veo dos métodos ...

  1. Suba los dos en el mismo paquete
    • ¿Cuál debería instalar por defecto?
    • ¿Hay alguna manera de probar la arquitectura del procesador del proyecto para tomar una decisión?
  2. Sube dos paquetes por separado

Pregunta adicional: ¿Qué sucede si uso algo como Chocolatey , que envuelve NuGet con la semántica del administrador de paquetes? Es posible que necesite / desee los paquetes x86 y x64 instalados en mi sistema.


No parece haber un objetivo específico para las arquitecturas de 32 o 64 bits. Es un poco molesto, pero ¿puedes hacer algo con los scripts de powershell (install.ps1) para detectar la arquitectura e instalarla en consecuencia?

Consulte la ejecución automática de scripts de PowerShell durante la instalación y eliminación del paquete - http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package


Puede agregar soporte x64 y x86 a un proyecto mediante el uso de referencias condicionales. Parece que por ahora a Nuget no le gusta tener dos referencias con el mismo nombre. Entonces, necesitamos agregar la segunda referencia manualmente y luego hacer las referencias condicionales.

Guarde ensamblajes x64 en una carpeta llamada ensambles x64 y x86 en una carpeta llamada x86. Ambos deben tener el mismo nombre de ensamblaje. Luego actualice la matriz allowedReferences con los nombres de todos los ensambles para agregar.

Use los siguientes scripts.

Install.ps1

$allowedReferences = @("Noesis.Javascript") # Full assembly name is required Add-Type -AssemblyName ''Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'' $projectCollection = [Microsoft.Build.Evaluation.ProjectCollection]::GlobalProjectCollection $allProjects = $projectCollection.GetLoadedProjects($project.Object.Project.FullName).GetEnumerator(); if($allProjects.MoveNext()) { $currentProject = $allProjects.Current foreach($Reference in $currentProject.GetItems(''Reference'') | ? {$allowedReferences -contains $_.Xml.Include }) { $hintPath = $Reference.GetMetadataValue("HintPath") write-host "Matched againt $hintPath" #If it is x64 specific add condition (Include ''Any Cpu'' as x64) if ($hintPath -match ''.*//(amd64|x64)//.*/.dll$'') { $Reference.Xml.Condition = "''TargetPlatform'' != ''x86''" $condition = $Reference.Xml.Condition write-host "hintPath = $hintPath" write-host "condition = $condition" #Visual Studio doesnt allow the same reference twice (so try add friends) $matchingReferences = $currentProject.GetItems(''Reference'') | ? {($_.Xml.Include -eq $Reference.Xml.Include) -and ($_.GetMetadataValue("HintPath") -match ".*//(x86)//.*/.dll$")} if (($matchingReferences | Measure-Object).Count -eq 0) { $x86 = $hintPath -replace ''(.*//)(amd64|x64)(//.*/.dll)$'', ''$1x86$3'' $x86Path = Join-Path $installPath $x86 if (Test-Path $x86Path) { #Add write-host "Adding reference to $x86" $metaData = new-object "System.Collections.Generic.Dictionary``2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]" $metaData.Add("HintPath", $x86) $currentProject.AddItem(''Reference'', $Reference.Xml.Include, $metaData) $newReference = $currentProject.GetItems(''Reference'') | ? {($_.Xml.Include -eq $Reference.Xml.Include) -and ($_.GetMetadataValue("HintPath") -eq $x86)} | Select-Object -First 1 $newReference.Xml.Condition = "''TargetPlatform'' == ''x86''" } } } #If it is x86 specific add condition if ($hintPath -match ''.*//x86//.*/.dll$'') { $Reference.Xml.Condition = "''TargetPlatform'' == ''x86''" $condition = $Reference.Xml.Condition write-host "hintPath = $hintPath" write-host "condition = $condition" #Visual Studio doesnt allow the same reference twice (so try add friends) $matchingReferences = $currentProject.GetItems(''Reference'') | ? {($_.Xml.Include -eq $Reference.Xml.Include) -and ($_.GetMetadataValue("HintPath") -match ".*//(amd64|x64)//.*/.dll$")} if (($matchingReferences | Measure-Object).Count -eq 0) { $x64 = $hintPath -replace ''(.*//)(x86)(//.*/.dll)$'', ''$1x64$3'' $x64Path = Join-Path $installPath $x64 if (Test-Path $x64Path) { #Add write-host "Adding reference to $x64" $metaData = new-object "System.Collections.Generic.Dictionary``2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]" $metaData.Add("HintPath", $x64) $currentProject.AddItem(''Reference'', $Reference.Xml.Include, $metaData) $newReference = $currentProject.GetItems(''Reference'') | ? {($_.Xml.Include -eq $Reference.Xml.Include) -and ($_.GetMetadataValue("HintPath") -eq $x64)} | Select-Object -First 1 $newReference.Xml.Condition = "''TargetPlatform'' != ''x86''" } else { $amd64 = $hintPath -replace ''(.*//)(x86)(//.*/.dll)$'', ''$1amd64$3'' $amd64Path = Join-Path $installPath $amd64 if (Test-Path $amd64Path) { #Add write-host "Adding reference to $amd64" $metaData = new-object "System.Collections.Generic.Dictionary``2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]" $metaData.Add("HintPath", $amd64) $currentProject.AddItem(''Reference'', $Reference.Xml.Include, $metaData) $newReference = $currentProject.GetItems(''Reference'') | ? {($_.Xml.Include -eq $Reference.Xml.Include) -and ($_.GetMetadataValue("HintPath") -eq $amd64)} | Select-Object -First 1 $newReference.Xml.Condition = "''TargetPlatform'' != ''x86''" } } } } } }

Desinstalar.ps1

$allowedReferences = @("Noesis.Javascript") # Full assembly name is required Add-Type -AssemblyName ''Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'' $projectCollection = [Microsoft.Build.Evaluation.ProjectCollection]::GlobalProjectCollection $allProjects = $projectCollection.GetLoadedProjects($project.Object.Project.FullName).GetEnumerator(); if($allProjects.MoveNext()) { foreach($Reference in $allProjects.Current.GetItems(''Reference'') | ? {$allowedReferences -contains $_.UnevaluatedInclude }) { $allProjects.Current.RemoveItem($Reference) } }