الحصول على محتوى الملفات و إخراج الأساسية برمجيا

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

  •  03-07-2019
  •  | 
  •  

سؤال

لسبب ما, لدينا النصي الذي يخلق دفعة الملفات XCOPY لدينا جمعت الجمعيات ملفات التكوين ، وغيرها من مختلف الملفات إلى مشاركة الشبكة لدينا اختبار بيتا.لدينا المثبت, ولكن البعض ليس لديه الأذونات المطلوبة لتشغيل المثبت ، أو أنها تقوم بتشغيل أكثر من Citrix.

إذا تقيأت في جميع أنحاء مكتبك في ذكر XCOPY و Citrix ، واستخدامها ذريعة للذهاب إلى المنزل في وقت مبكر.على الرحب والسعة.

رمز حاليا مئات من خطوط مثل:

CreateScripts(basePath, "Client", outputDir, FileType.EXE | FileType.DLL | FileType.XML | FileType.CONFIG);

كان عليه أن يكون أسوأ من ذلك ، مع 20 الباحث المعلمات (واحد لكل نوع الملف) وهو ما إذا كان أو عدم نسخ هذا النوع من الملفات إلى الدليل الإخراج.

هذه المئات من خطوط إنشاء تحميل/تنزيل الملفات الدفعية مع الآلاف من XCOPY خطوط.في الإعداد لدينا مشاريع يمكننا الإشارة أشياء مثل "إخراج أساسي من العميل" و "محتوى الملفات من العميل".أحب أن تكون قادرة على القيام بذلك برمجيا من غير إعداد المشروع ، ولكن أنا في حيرة.

من الواضح أن مايكروسوفت لا ، إما باستخدام API أو تحليل .csproj الملفات.كيف لي أن أفعل هذا ؟ أنا فقط أبحث عن طريقة للحصول على قائمة من الملفات لأي من الإعداد الفئات ، أي:

  • إخراج الأساسية
  • الموارد المترجمة
  • محتوى الملفات
  • ملفات الوثائق

تحرير:لدي مشروع إعداد مثل هاث اقترحت انها في منتصف الطريق إلى ما كنت أبحث عنه.المشكلة الوحيدة حفظ ذلك من كونه الحل الأمثل هو أن مشاريع متعددة تعتمد على نفس الجمعيات يجري في المجلد الخاصة بهم, و الإعداد فقط نسخ الملف مرة واحدة.

على سبيل المثال:

مشاريع الادارة العميل و الخادم كلها تعتمد على ExceptionHandler.dll و المشرف والعميل على حد سواء تعتمد على Util.dll بينما الخادم لا.هذا هو ما كنت أبحث عنه:

  • المشرف
    • Admin.exe
    • المشرف.exe.التكوين
    • ExceptionHandler.dll
    • Util.dll
  • العميل
    • Client.exe
    • العميل.exe.التكوين
    • ExceptionHandler.dll
    • Util.dll
  • الخادم
    • Server.exe
    • الملقم.exe.التكوين
    • ExceptionHandler.dll

منذ المشار إليها الجمعيات هي كل نفس ما أحصل عليه هو هذا:

  • المشرف
    • Admin.exe
    • المشرف.exe.التكوين
    • ExceptionHandler.dll
    • Util.dll
  • العميل
    • Client.exe
    • العميل.exe.التكوين
  • الخادم
    • Server.exe
    • الملقم.exe.التكوين

هذا يؤدي إلى FileNotFoundException عندما إما عميل أو ملقم لا يمكن العثور على واحد من اثنين من DLLs انها تتوقع.

هل هناك إعداد الخاصية أنا في عداد المفقودين لجعله دائما نسخ الإخراج ، حتى لو أنها تتكرر في أماكن أخرى في مشروع آخر هو الإخراج ؟

تحرير مرة أخرى:المشار إليها جميع ملفات Dll يتم تعيين إلى "نسخ" المحلية ، دائما.وجدت لائق المادة على باستخدام نانت و XSLT للاستيلاء على قائمة الملفات, لذا قد يكون الحل كما neouser99 المقترحة.

قبول الحل:أنا أعود من حيث بدأت.كل .exe و .dll النواتج وضعت في "بن" الدليل في إعداد المشروع ، معبأة فضفاضة.الأخرى في تطبيق مجلدات تحتوي على اختصارات إلى الملف القابل للتنفيذ في هذا الدليل.

الفرق الآن هو أنني ذاهب لإضافة إجراء مخصص المثبت على استخدام التفكير ، تعداد تبعيات لكل للتنفيذ الناتج نسخ .exe و .ملفات dll إلى أدلة منفصلة.قليلا من الألم ، كما افترضت أن هناك طريقة برمجيا الكشف عن ما هي الملفات التي ستدرج عبر بعض الإعداد المكتبة.

هل كانت مفيدة؟

المحلول

لماذا لا تستخدم آخر إعداد المشروع مجرد مجموعة 'حزمة ملفات الإعداد إلى تفقد ملفات مضغوطة (setup project->خصائص)?ثم مشاركة المجلد..أو شيء من هذا.

تحرير:

أرى لديك 3 مجلدات المخرجات الخاصة بك.ولكن المشروع الإعداد فقط بالكشف عن ExceptionHandler.dll و Util.dll مرة واحدة, لذلك سوف نختار المجلد الأول ووضعها هناك.

هل يمكن أن تفعل إعداد مشروع لكل مشروع - مزعج بعض الشيء ربما..

يمكنك يدويا إضافة dll إلى المشاريع التي هي في عداد المفقودين الجمعية إما عن طريق إضافة في الملف عن طريق إضافة ملف " أو "إضافة الجمعية' أو 'إضافة إخراج المشروع' إذا كان لديك تلك المشاريع في نفس الحل..(أشك في أن هذا هو الحال على الرغم من).

أو مجرد تفريغ كل منهم في واحد دليل الإخراج...

نصائح أخرى

على الرغم من أنه تم تصميم وبناء أداة ، قد تجد نانت أن تكون مفيدة للغاية في ما كنت تتحدث عن.المهام (بناء, نسخ, نقل, حذف, الخ.) يمكنك تحديد تسمح جدا غرامة الحبيبات ملف عمليات البحث ، تصل إلى عام كامل المجلدات.إذا كنت تشمل أيضا نانت في عملية الإنشاء ، أعتقد أنك يمكن أن تجد أنه يساعد في المزيد من الطرق ثم واحدة.

نهج آخر التي عملت بالنسبة لي في الماضي هو لإضافة الموارد المشتركة (الجمعية DLL أو المشروع) كمرجع لكل من المشرف الخادم و العميل المشاريع.ثم افتح لوحة خصائص المشار إليها في هذا البند في كل مشروع و مجموعة "نسخة المحلية" إلى true.

الآن عند بناء المشاريع, كل لها مثيل الجمعية نسخها إلى المجلد الإخراج.

هذا وينبغي أيضا أن يسبب المكونات المشتركة المضافة في هذه الطريقة أن يكون تكرارها في كل من الناتج والمجلدات في حزمة "الإعداد".

مقاربة مختلفة تماما يمكن أن تساعدهم كما وصلات رمزية على مشاركة شبكة الاتصال.ارتباط رمزي هو في الأساس قطع قصيرة حيث نظام الملفات يخفي حقيقة أنه هو قطع قصيرة ، لذلك جميع التطبيقات الأخرى في الواقع يعتقد أن الملف قد تم نسخها (http://en.wikipedia.org/wiki/NTFS_symbolic_link).

ومن مزايا هذا النهج هو أن الملف هو تحديث على الفور التغييرات الملف و ليس فقط عند بناء المشاريع الخاصة بك.حتى عندما كنت على سبيل المثال حفظ واحدة من التكوين الملفات مع محرر نصوص تطبيق التحديث على الفور.

التالية MSBuild النصي يمكنك بناء الخاصة بك SLN الملف (يمكنك استبدالها .csproj) وسوف التقرير قائمة بجميع المشاريع التي تم بناء (Dlls السابقين).

 <MSBuild Projects="MySolution.sln" Targets="Clean; Rebuild" Properties="Configuration=$(BuildMode);">
    <Output TaskParameter="TargetOutputs"
                ItemName="AssembliesBuilt" />
    </MSBuild>

الآن, هذا لا يحل المشكلة ، ولكن يحصل لك قائمة من كل ما كان بناء.لديك أيضا copylocal لذا ربما يمكن أن تأخذ فقط AssembiesBuild ونسخ جميع DLL .التكوين الملفات من هناك.

على سبيل المثال:

AssembliesBuild = c:\myproj\something1\build.dll

كنت أذهب إلى c:\myproj\something1\ و ببساطة البحث عن كافة *.dll و *.ملفات التكوين وتشمل لهم.يمكنك القيام بذلك بسهولة جدا مع MSBuild أو powershell, إذا كنت قد ركبت عليه.إلى إخراج XCOPY النصي من MSBuild, أعتقد أنك سوف تحتاج MSBuild contrib projct المثبتة.

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