私も同じ問題に遭遇し、それを乗り越えることができました。それでは、私が適用した手順について説明しましょう。あなたのシナリオに合わせて説明します。
私のメソッドによると、相対パスを取得するには、「Path」クラスと「Assembly」クラスを使用する必要があります。
したがって、ステートメントを使用する際には、最初にSystem.IOとSystem.Reflectionをインポートします。
次に、以下のコード行を入力します。
var outPutDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly(). CodeBase);
実際には、上記の行には、プロジェクトの出力ディレクトリのパスが格納されています(ここで、「output」ディレクトリはプロジェクトのDebugフォルダを指します)。
次に、FolderIconディレクトリをDebugフォルダにコピーします。次に、以下の行を入力します。
var iconPath = Path.Combine(outPutDirectory, "FolderIcon\\Folder.ico");
これで、この 'iconPath'変数には、Folder.icoのパス全体が含まれます。あなたがしなければならないのはそれを文字列変数に格納することだけです。そのためには、以下のコード行を使用してください。
string icon_path = new Uri(iconPath ).LocalPath;
これで、このicon_path文字列変数をアイコンへの相対パスとして使用できます。
ありがとう。