32 votes

Erreur MSBuild "CSC : error CS2001 : Source File 'x' could not be found" avec Linked Files après la mise à jour vers Visual Studio 2012

Après avoir mis à jour automatiquement le fichier de projet pour une application web .Net 4.0 afin qu'il fonctionne avec Visual Studio 2012, tout a fonctionné correctement au début, mais lors de la compilation, j'ai obtenu beaucoup d'erreurs comme celle-ci :

Description : Fichier source '.. \..\..\..\..\File Le "chemin" n'a pas pu être trouvé

Dossier : CSC

Et lorsque j'ai essayé de construire en utilisant MSBuild (en passant uniquement le chemin complet du projet, sans aucun paramètre supplémentaire) dans l'"Invite de commande du développeur pour VS2012", j'ai obtenu essentiellement les mêmes erreurs :

"CSC : erreur CS2001 : Le fichier source 'x' n'a pas été trouvé".

Toutes les erreurs se réfèrent à Fichiers liés (aspx,cs,etc) situés dans d'autres projets d'applications web situés à une autre profondeur dans notre branche de code (c'est pourquoi tous les '....\' au début des chemins)

Il me semble qu'il s'agit d'un problème avec le fichier Longueur J'ai eu le même problème il y a quelque temps en construisant les projets sur notre serveur CI en utilisant MSBuild, j'ai pu le gérer en manipulant les fichiers de projet avant de les construire en utilisant un script personnalisé sans avoir besoin de déplacer la branche ou de réduire la profondeur des projets, je n'ai pas eu à déplacer quoi que ce soit, la chose importante à l'époque était que les développeurs utilisant Visual Studio 2010 pouvaient tout compiler sans problème. J'ai appris par ce biais que la compilation/construction avec MSBuild était différente de celle avec DevEnv/VS, et par exemple MSBuild ne supportait pas la construction de projets Setup alors que DevEnv le faisait.

Puisque cela se produit maintenant avec VS 2012/DevEnv 2012, plus que VS 2012 ne supporte plus les projets de configuration (comme msbuild), plus que VS/DevEnv ont le même problème avec la longueur de fichier, il semble que VS 2012 utilise finalement msbuild sous le capot ou sont plus étroitement intégrés, cependant je n'ai pas trouvé d'article pour confirmer cela.

Changer la structure des branches/changer la profondeur des projets n'est pas une option pour le moment pour plusieurs raisons (grande base de code, grand nombre de projets, risque, timing, effort, etc.)

Quelqu'un a-t-il une solution alternative ou un correctif pour ce problème dans Visual Studio 2012 ?

Voir aussi,

P.D. : BTW J'ai déjà vérifié ce message Erreur MSBuild avec des fichiers liés mais comme je l'ai déjà dit, changer les chemins n'est pas une option pour l'instant.

0 votes

Même problème ici, j'espère que quelqu'un pourra m'éclairer sur le problème

0 votes

Même problème sauf que le fichier source est '' (vide)

0 votes

Je sais que cette question a été posée il y a environ un an, mais je peux confirmer qu'il y a un problème de longueur de fichier lorsqu'il s'agit de référencer des fichiers sources en tant que fichiers liés dans Visual Studio 2012. J'ai rencontré ce problème il y a quelques jours de façon mystérieuse, et je ne pouvais pas comprendre pourquoi l'explorateur de solutions était capable d'afficher les fichiers, mais le compilateur (CSC) avait des problèmes pour les trouver. J'espère que ce problème est résolu dans VS2013 ?

4voto

N.K Points 98

Essayez d'obtenir les journaux de construction,

http://msdn.microsoft.com/en-us/library/vstudio/ms171470.aspx

il semble que la tâche csc n'ait pas pu trouver le fichier source. L'une des causes est que vous avez importé le mauvais fichier. Vous devez donc éditer le fichier du projet via un éditeur de texte normal.

2voto

user5688731 Points 21

J'ai trouvé une solution à ce problème, lorsque vous liez le fichier, le chemin relatif est reconnu par msbuild et revenir en arrière à partir de là, cela devient votre chemin dans un long chemin, cependant vous pouvez le changer dans la définition du projet en faisant un clic droit/décharger le projet/ et en changeant le chemin de ../../../ à $(SolutionDir)/../.. jusqu'à ce qu'il trouve le fichier à lier, note : il s'agit d'étendre le caractère de 255 à 300 caractères.

1voto

Thierry Points 561

Mes 2 centimes sur ce problème... Dans mon cas, j'avais un fichier créé dans un projet (c'est-à-dire ConfigModel) et j'avais un lien vers ce fichier dans un autre projet, mais lorsque j'ai renommé le fichier ConfigModel dans le premier projet en LoginModel par exemple, le lien n'a pas été renommé dans le deuxième projet, ce qui a provoqué l'apparition de cette erreur.

1voto

Jhonatan P Points 130

Je sais que j'ai posé cette question il y a un certain temps, mais pour ce qu'elle vaut, l'approche que nous avons finalement retenue était la suivante :

  • Localisation des fichiers signalés comme étant trop longs.
  • Réduire la longueur du chemin d'accès complet de ces fichiers, en réduisant la longueur du nom et/ou de l'adresse. la longueur du dossier contenant ou en réduisant le niveau d'imbrication des dossiers. du dossier. Il s'agit donc de réduire la longueur totale du chemin d'accès.
  • Mettre à jour les liens des fichiers modifiés (re-linking) sur les projets dépendants.

Cela a résolu le problème avec Visual Studio 2012 sur les postes de travail des développeurs et sur nos serveurs CI/Deploy qui utilisaient MSbuild.

Pour mon scénario, cette approche était moins risquée et impliquait moins d'efforts que de déplacer des projets/solutions complets pour réduire le niveau d'imbrication de leurs dossiers ou de réduire les noms de dossiers, et de devoir mettre à jour toutes les références des projets/solutions dépendants.

1voto

Jomtung Points 28

Ok, je suis tombé sur ce problème et je l'ai résolu aujourd'hui. Je l'ai trouvé en suivant un tutoriel msdn ( https://msdn.microsoft.com/en-us/library/ms379563%28v=vs.80%29.aspx ) et voici la commande qui m'a fait défaut :

csc /t:library /out:MyCodeLibrary.dll simpleType.cs

Me donner le message

error CS2001: Source file 't:librabry' could not be found

Ce qui a fonctionné après avoir remplacé la commande originale par la suivante :

csc /target:library /out:MyCodeLibrary.dll simpleType.cs

Je ne sais pas exactement pourquoi la version courte du drapeau /target provoque cette erreur, mais je n'ai trouvé nulle part ailleurs en ligne une mention spécifique de cette cause et j'ai donc voulu la consigner ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X