32

.Net 4.0 Web アプリケーションのプロジェクト ファイルを Visual Studio 2012 で動作するように自動的にアップグレードした後、最初はすべて問題なく動作しましたが、コンパイル時に次のような多くのエラーが発生しました。

説明 : ソース ファイル '..\..\..\..\..\File Path' が見つかりませんでした

ファイル: CSC

また、「VS2012 の開発者コマンド プロンプト」で MSBuild を使用してビルドしようとすると (追加のパラメーターなしでプロジェクトのフル パスのみを渡す)、基本的に同じエラーが発生しました。

「CSC: エラー CS2001: ソース ファイル 'x' が見つかりませんでした」

すべてのエラーは、コード ブランチの別の深さにある他の Web アプリケーション プロジェクトにあるリンクされたファイル(aspx、cs など) を参照しています (そのため、パスの先頭にあるすべての '....\' があります)。

私には、ファイル Length に問題があるように見えます。少し前に、MSBuild を使用して CI サーバーでプロジェクトをビルドするときに同じ問題が発生しました。プロジェクト ファイルを操作してから、カスタム スクリプトを使用せずにビルドすることで管理できました。ブランチを移動したり、プロジェクトの深さを減らしたりする必要がありましたが、何も移動する必要はありませんでした。当時重要だったのは、Visual Studio 2010 を使用している開発者が問題なくすべてをコンパイルできることでした。これにより、MSBuild でのコンパイル/ビルドは DevEnv/VS とは異なり、たとえば、MSBuild は Setup プロジェクトのビルドをサポートしていませんが、DevEnv はサポートしていたことを知りました。

これは現在 VS 2012/DevEnv 2012 で発生しているため、さらに VS 2012 はセットアップ プロジェクト (msbuild など) をサポートしていないため、さらに VS/DevEnv にはファイル長に関する同じ問題があり、VS 2012 は最終的に msbuild を使用しているように見えます内部で、またはより緊密に統合されていますが、これを確認する記事は見つかりませんでした。

ブランチ構造の変更/プロジェクトの深さの変更は、いくつかの理由 (大規模なコード ベース、多数のプロジェクト、リスク、タイミング、労力など) により、現時点ではオプションではありません。

Visual Studio 2012 でこの問題の代替ソリューションまたは修正プログラムを誰かが持っていますか?

よろしく、

PD: ところで、リンクされたファイルでこのポスト MSBuild エラーを既に確認しましたが、パスを変更する前に言ったように、現在はオプションではありません。

4

9 に答える 9

2

この問題の解決策を見つけました。ファイルをリンクすると、相対パスが認識されmsbuild、そこから戻ると長いパスになりますが、プロジェクト定義で右クリック/プロジェクトのアンロードを実行して変更できます/リンクするファイルが見つかるまで、パスを から../../../に変更し$(SolutionDir)/../..ます。注意: 文字を 255 から 300 文字に拡張します。

于 2015-12-16T22:37:03.967 に答える
1

この問題は、以前のバージョンの git リポジトリに戻したときに発生しました。どうやらプロジェクトファイルをレポに追加しなかったため、元に戻したときにプロジェクトファイルも元に戻されませんでした。それを解決するために私がしたことは、プロジェクト エクスプローラーで不足しているファイルをクリックして、不足している .cs ファイルをプロジェクトから除外することでした。三角形の警告マークが付いていたので、見つけやすかったです。次に、ソリューション全体を再構築します。

于 2015-09-16T20:09:41.637 に答える
1

わかりました、私はこれを打って今日解決しました。msdn チュートリアル ( https://msdn.microsoft.com/en-us/library/ms379563%28v=vs.80%29.aspx ) に従って見つけたのですが、壊れたコマンドは次のとおりです。

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

メッセージをくれる

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

元のコマンドを次のように変更した後、これは機能しました。

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

短いバージョンの /target フラグがこのエラーを引き起こす理由はわかりませんが、この原因を具体的に指摘しているオンラインの場所が他に見つからなかったので、ここに記録したいと思いました。

于 2015-06-04T21:25:15.620 に答える
1

少し前にこの質問をしたことは知っていますが、何が価値があるのか​​ 、私たちが最終的に行ったアプローチは次のとおりです。

  • 長すぎると報告されたファイルを見つけます。
  • 名前の長さやコンテナー フォルダーの長さを短くするか、フォルダーのネスト レベルを減らすことで、これらのファイルのフル パスの長さを減らします。したがって、完全なパスの長さを減らします。
  • 依存プロジェクトで変更されたファイルのリンクを更新 (再リンク) します。

これにより、開発者ワークステーションと MSbuild を使用する CI/Deploy サーバーで Visual Studio 2012 の問題が解決されました。

私のシナリオでは、このアプローチはリスクが少なく、完全なプロジェクト/ソリューションを移動してフォルダーのネストレベルを減らしたり、フォルダー名を減らしたり、依存プロジェクト/ソリューションのすべての参照を更新する必要があるよりも労力が少なくて済みます。

于 2014-07-31T00:28:51.733 に答える
0

私は他の誰かが取り組んでいたプロジェクトからこの問題を継承しました。私の場合は、Entity Framework .tt テンプレートによって生成されるはずの .cs ファイルでしたが、何らかの理由でそうではなかったため、コンパイラはすべてCS2001について行っていました。それ。テンプレートを更新して手動で実行する必要がありましたが、その後はすべて機能しました。

于 2021-05-10T10:40:32.520 に答える
0
  1. 他のプロジェクトからリンクされたファイルの最新バージョンがあることを確認してください。それらが別のプロジェクトに属している場合、Visual Studio はそれらを自動的に取得しません。
  2. リンクされたパスが実際に正しいことを確認してください。SysInternals ProcMon ツールを使用して、VS.NET と MSBUILD がアクセスしようとしているファイルを監視できます (プロセス名でフィルター処理し、すべての成功をフィルター処理して除外します)。
  3. パスの長さが問題であると思われる場合 (これは ProcMon ツールにも表示されます)、相対パス ( ……\Z)。リンクされたファイルの場所は変更されません。
于 2014-01-26T11:26:43.287 に答える