الحصول على القيمة الكلية لـ TargetPath الخاص بالمشروع عبر DTE
-
14-11-2019 - |
سؤال
أحتاج إلى الحصول على مسار الإخراج المطلق لتجميع المشروع عبر DTE.حاولت القيام بذلك باستخدام هذه الطريقة, ، حيث يمكنني الوصول إلى خاصية OutputPath، ودمجها مع اسم التجميع، ولكن هذا ينتج المسار النسبي، مثل:
..\..\Output\AnyCPU\Debug\MyAssembly.dll
استخدام Path.GetFullPath
ليس جيدًا بالنسبة لي، لأن مشروعي قد يتم تنفيذه من موقع آخر.
لقد لاحظت أن الماكرو $(TargetPath) (في علامة التبويب Build Events في خصائص المشروع) يحتوي على المسار الكامل للتجميع.كيف يمكنني الوصول إلى هذه القيمة برمجياً من DTE؟
السؤال الفعلي هو - كيف يمكنني الحصول على مسار الإخراج المطلق للمشروع؟
المحلول
لا أعرف كيفية الوصول برمجيًا إلى "$(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 ولكن يمكنك دائمًا نسخه احتياطيًا)