الحصول على القيمة الكلية لـ TargetPath الخاص بالمشروع عبر DTE

StackOverflow https://stackoverflow.com/questions/5486593

سؤال

أحتاج إلى الحصول على مسار الإخراج المطلق لتجميع المشروع عبر 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 ولكن يمكنك دائمًا نسخه احتياطيًا)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top