1

特定の .net ソリューションのすべての参照アセンブリの場所を列挙する単体テストを作成する必要があります。私は検索してきましたが、問題に合ったものを見つけることができませんでした。

参照されているすべてのアセンブリを強制的にアプリ ドメインにロードする方法はありますか? を調べました 。参照されているすべてのアセンブリのパスを取得し ます

GetAssemblies() メソッドは、読み込まれたアセンブリを提供します。しかし、ロードされていないアセンブリのパスも必要です。

簡単に言えば、Visual Studio でさまざまなプロジェクトの「参照」を展開したときに表示されるすべてのアセンブリの場所を知りたいだけです。

.csproj ファイルを見ると、すべての参照が表示されます。これに対するビルドスクリプトのソリューションはありますか? ただ疑問に思っています。

アイデア?

期待して感謝します。

4

2 に答える 2

1

これが全体のコードです。最初の方法は、.sln ファイルを読み取り、正規表現を使用して .csproj ファイルを識別します。2 番目の方法は、.csproj ファイルのパスを取得し、それを解析して、参照されている dll の場所を見つけます (GAC がインストールされたアセンブリを識別しないことに注意してください) -

public void GetAllCSProjectFiles()
{
var Content = File.ReadAllText("PathTo.sln");
        Regex projReg = new Regex(
            "Project\\(\"\\{[\\w-]*\\}\"\\) = \"([\\w _]*.*)\", \"(.*\\.(cs|vcx|vb)proj)\""
            , RegexOptions.Compiled);
        var matches = projReg.Matches(Content).Cast<Match>();
        var Projects = matches.Select(x => x.Groups[2].Value).ToList();
        for (int i = 0; i < Projects.Count; ++i)
        {
            if (!Path.IsPathRooted(Projects[i]))
                Projects[i] = Path.Combine(Path.GetDirectoryName("PathTo.sln"),
                    Projects[i]);
            Projects[i] = Path.GetFullPath(Projects[i]);

            CheckForDllReferences(Projects[i]);
        }
}

public static void CheckForDllReferences(String csprojFile)
    {
        XmlDocument xdDoc = new XmlDocument();
        xdDoc.Load(csprojFile);

        XmlNamespaceManager xnManager =
         new XmlNamespaceManager(xdDoc.NameTable);
        xnManager.AddNamespace("tu",
         "http://schemas.microsoft.com/developer/msbuild/2003");

        XmlNode xnRoot = xdDoc.DocumentElement;
        XmlNodeList xnlPages = xnRoot.SelectNodes("//tu:HintPath", xnManager);

        foreach (XmlNode node in xnlPages)
        {
            string location = node.InnerText.ToLower();
            //do something
        }
    }
于 2013-07-10T12:56:17.550 に答える
1

完全なソリューションで dll のすべての参照のリストを取得したいと考えています。まず、現在のソリューションのすべてのプロジェクトのリストを取得します。

ソリューション内のすべてのプロジェクトをプログラムで一覧表示するにはどうすればよいですか?

これで、ソリューションのすべてのプロジェクトのリストが表示され、(すべてのプロジェクトの) .csproj ファイルを読み取って、ItemGroup タグの下のタグを読み取ることができるようになりました。

組み込み関数を使用して取得しようとすると、ロードされたアセンブリのリストのみが表示されますが、欠落している(しかし参照されている)アセンブリのリストは表示されません。

その他の便利な同様のリンク:

別のフォルダーからのアセンブリ参照を解決する

http://www.codeproject.com/Questions/88183/How-to-get-all-dll-name-which-is-reference-in-C-pr

于 2013-07-09T06:42:00.337 に答える