3

DTEを介してプロジェクトのアセンブリの絶対出力パスを取得する必要があります。このメソッドを使用してこれを実行しようとしました。このメソッドでは、OutputPathプロパティにアクセスし、アセンブリ名と組み合わせますが、これにより、次のような相対パスが生成されます。

..\..\Output\AnyCPU\Debug\MyAssembly.dll

私のプロジェクトは別の場所から実行されている可能性があるため、使用するPath.GetFullPathことは私には良くありません。

$(TargetPath)マクロ(プロジェクトプロパティの[ビルドイベント]タブ)に、アセンブリのフルパスが含まれていることに気付きました。DTEからプログラムでこの値にアクセスするにはどうすればよいですか?

実際の質問は、プロジェクトの絶対出力パスを取得するにはどうすればよいですか?

4

1 に答える 1

3

プログラムで「$(TargetPath)」にアクセスする方法がわかりません。これが最善の解決策であった可能性があることに同意します。

ただし、OutputPathプロパティはプロジェクトファイルが存在するフォルダーに相対的であるため、前述のアプローチは引き続き機能するはずです。(これが当てはまらないシナリオが見当たらない場合はお知らせください。)

したがって、次のようなことを行うことができます。

      private static string GetProjectExecutable(Project startupProject, Configuration config)
    {
        string projectFolder    = Path.GetDirectoryName(startupProject.FileName);
        string outputPath       = (string)config.Properties.Item("OutputPath").Value;
        string assemblyFileName = (string)startupProject.Properties.Item("AssemblyName").Value + ".exe";
        return Path.Combine(new[] {
                                      projectFolder,
                                      outputPath,
                                      assemblyFileName
                                  });
    }

(ここで使用されるPath.Combineのオーバーロードは、.NET 4.0でのみ使用可能ですが、いつでもバックポートできます)

于 2011-03-30T13:13:58.010 に答える