Je solution complexe avec beaucoup de projets d'application Web MVC qui doivent être construits d'une manière spécifique. C'est pourquoi j'utilise un projet de construction personnalisé et un utilitaire msbuild
pour créer la solution sur ma machine locale. Le truc, c'est que la solution et tous les projets qui s'y trouvent se construisent avec succès en Visual Studio
. Mais lorsque je tente de construire la solution par l'intermédiaire msbuild
à l'aide AspNetCompiler
je continue à obtenir la même erreur:Impossible de charger le fichier ou l'assemblage lors de la construction en utilisant le compilateur ASP .Net et construire sur mesure projet
ASPNETCOMPILER : error ASPCONFIG: Could not load file or assembly 'Duke.Owin.VkontakteMiddleware, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))
Cette erreur ne semble pas quand je construis solution dans Visual Studio
(2013). Essayer de résoudre le problème, je l'ai déjà fait ce qui suit:
- Toutes les références existantes dans les projets de ma solution sont configurés pour
Copy local = true
- Avant chaque version I clair (et supprimer) tous les
bin
etobj
dossiers de mes projets. - J'ai effacé les fichiers temporaires Asp .Net plusieurs fois et avant chaque génération.
- Tous les assemblées, le compilateur dit qu'il ne peut pas trouver, sont situés dans le dossier packages.
Essayé pour restaurer les paquets NuGet avant chaque construction:
- Téléchargé NuGet
- Activé package NuGet restauration en ajoutant la variable d'environnement
EnableNuGetPackageRestore=true
- Ajouté commande
<Exec Command='$(ToolsDirectory)\nuget restore "$(Solution)"'/>
à mon projet de construction.
Essayé définir manuellement les références dans la construction du projet:
<ItemGroup><Reference Include="Duke.Owin.VkontakteMiddleware"><HintPath>$(PackagesFolder)\Duke.Owin.VkontakteMiddleware.1.2.0.0\lib\net45\Duke.Owin.VkontakteMiddleware.dll</HintPath></Reference></ItemGroup>
Comme il est suggéré here, je modifié manuellement le fichier de projet qui ne parvient pas à construire et ajouté
<Private>True</Private>
dans chaque noeudReference
qui n'est pas trouvé par le compilateur.Essayé dll copie manuelle manqués:
<Copy SourceFiles="$(PackagesFolder)\Duke.Owin.VkontakteMiddleware.1.2.0.0\lib\net45\Duke.Owin.VkontakteMiddleware.dll" DestinationFolder="$(OutputDirectory)\bin" SkipUnchangedFiles="true" />
Mais, après tout ce qui précède, toujours pas de chance. Y a-t-il d'autres solutions?
MISE À JOUR: Si j'ajoute l'ensemble à GAC il aide réellement, mais certains de mes ensembles sont installés des paquets de la NuGet et ils ne sont pas un nom fort, je ne peux pas ajouter tous au GAC. Et, bien sûr, l'enregistrement de toutes les assemblées dans le GAC n'est pas une solution souhaitable.
Il s'agit d'un problème courant lorsque l'on utilise un environnement de construction situé ailleurs. L'essentiel est que la machine de construction elle-même doit avoir accès à toutes les DLL de votre machine locale.En règle générale, cela signifie que la machine de construction devra soit installer ces DLL ou vous devrez les inclure dans votre assemblage. Qui fait référence à celui-ci? Duke.Owin.VkontakteMiddleware et où est-il trouvé sur votre machine locale? –
@JohnPeters, j'effectue la construction sur ma machine locale. Je n'ai aucun serveur de build. Cette DLL se trouve dans le dossier packages de ma solution et est référencée par l'un des projets. – Dmytro
Avez-vous essayé d'utiliser NuGet pour restaurer les packages de solution avant d'exécuter msbuild? 'nuget restore MySolution.sln' – Diego