Je suis en train de mettre en place un projet ASP.NET Core sur TeamCity. Les binaires qu'il construit se plantent au démarrage sur d'autres machines. Le message d'erreur montre qu'il recherche des dll dans des chemins qui n'existent que sur le serveur de construction. DotPeek montre qu'il y a un fichier de ressources intégré dans le fichier .exe appelé myproject.deps.json
. Dans la section des cibles, il y a des références aux dlls utilisant des chemins absolus. Cela signifie que les binaires ASP.NET Core ne s'exécuteront jamais que sur la machine sur laquelle ils ont été construits.
Comment résoudre ce problème ? Quel est ce fichier, et comment faire pour qu'il utilise des chemins relatifs ? Après quelques recherches, il semble que les chemins proviennent de project.fragment.lock.json
qui est un fichier généré. Si je le modifie pour utiliser des chemins relatifs, le fichier est simplement écrasé à nouveau. Qu'est-ce qui génère ce phénomène, et comment le corriger ou l'arrêter ?
Pour ceux qui ont demandé, project.json
ressemble :
{
"dependencies": {
"CommandLineParser": "1.9.71",
"Microsoft.AspNetCore.Mvc": "1.0.0",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
"Microsoft.Extensions.Logging": "1.0.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.Extensions.Logging.Debug": "1.0.0",
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
"System.Configuration.Abstractions": "1.0.0"
},
"tools": {
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
},
"frameworks": {
"net461": {
"dependencies": {
"Company.Common": {
"target": "project"
},
"Company.Integration": {
"target": "project"
},
"Company.Functions": {
"target": "project"
},
"Company.Utils": {
"target": "project"
}
}
}
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"publishOptions": {
"include": [
"wwwroot",
"Views",
"Areas/**/Views",
"appsettings.json",
"web.config"
]
},
"scripts": {
"postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}
}
0 votes
Ces références de chemin absolu sont des bibliothèques tierces ?
0 votes
@Evk Certains d'entre eux, d'autres sont des références à des bibliothèques internes.
0 votes
TeamCity est-il installé sur votre machine, ou sur un serveur séparé ? La version de dotnet est-elle à jour ? Quelle partie du fichier deps.json contient le chemin vers les bibliothèques - pouvez-vous comparer avec le fichier construit localement et nous montrer les différences ?
0 votes
@Dmitry TeamCity est installé sur un serveur de construction. Oui, .NET Core a été installé hier. C'est la section des cibles de deps.json. La seule différence est les chemins.
0 votes
Le nom de votre projet contient-il des espaces ? Pouvez-vous afficher votre
project.json
?0 votes
@Hypnobrew Le nom du projet ne contient pas d'espace. Question modifiée pour inclure
project.json
0 votes
Avez-vous utilisé
dotnet publish
pendant votre construction pour créer une sortie copiable ? en utilisant simplementdotnet build
pour project.json n'est pas garanti pour produire une sortie déployable (il a été conçu pour être plus rapide pour le développement en "boucle interne").