سؤال

لقد انتهيت للتو من إعداد الخروج من المكان بناء نظام الموجودة لدينا رمز C++ باستخدام خاصية موروثة أوراق الميزة التي يبدو أن تكون محددة إلى Visual C++ المنتج.بناء خارج المكان يتطلب أن العديد من إعدادات المشروع تغيير الملكية الموروثة أوراق سمح لي أن تغيير جميع الإعدادات اللازمة فقط عن طريق ربط الملكية ورقة المشروع.أنا المهاجرة لدينا فريق من C++/MFC واجهة المستخدم إلى C# و WPF, ولكن أنا بحاجة إلى تقديم نفس خارج المكان بناء وظائف, نأمل مع نفس الراحة.أنا لا يمكن أن يبدو للعثور على طريقة للقيام بذلك مع C# مشاريع - نظرت أولا لمعرفة إذا كان يمكن أن المرجعية غير MsBuild الأهداف الملف ولكن لا يمكن العثور على طريقة للقيام بذلك.أنا أعرف فقط يمكن استخدام MsBuild عن كل شيء, ولكن الذي يبدو أكثر تعقيدا من اللازم.هل هناك طريقة يمكنني تحديد ماكرو دليل واستخدامها في مسار الإخراج على سبيل المثال ؟

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

المحلول

أنا لست متأكدا تماما ما هو "خارج المكان" بناء النظام ، ولكن فقط إذا كنت في حاجة إلى القدرة على نسخ الملفات المترجمة (أو الموارد الأخرى) إلى الدلائل الأخرى يمكنك القيام بذلك عن طريق ربط إلى MSBuild بناء الأهداف.

في مشاريعنا ننتقل المترجمة dlls في ليب مجلدات و وضع الملفات في المواقع المناسبة بعد بناء كاملة.للقيام بذلك قمنا بإنشاء بنية مخصصة .الملف الهدف الذي يخلق Target's ، Property's ، ItemGroupهذا ثم نستخدم لملء الخارجية المجلد الإخراج.

عادتنا الأهداف الملف يبدو مثل هذا:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <ProjectName>TheProject</ProjectName>
        <ProjectDepthPath>..\..\</ProjectDepthPath>
        <ProjectsLibFolder>..\..\lib\</ProjectsLibFolder>

        <LibFolder>$(ProjectsLibFolder)$(ProjectName)\$(Configuration)\</LibFolder>
    </PropertyGroup>

    <Target Name="DeleteLibFiles">
        <Delete Files="@(LibFiles-> '$(ProjectDepthPath)$(LibFolder)%(filename)%(extension)')" TreatErrorsAsWarnings="true" />
    </Target>
    <Target Name="CopyLibFiles">
        <Copy SourceFiles="@(LibFiles)" DestinationFolder="$(ProjectDepthPath)$(LibFolder)" SkipUnchangedFiles="True" />
    </Target>

    <ItemGroup>
        <LibFiles Include=" ">
            <Visible>false</Visible>
        </LibFiles>
    </ItemGroup>
</Project>

على .csproj الملف في Visual Studio ثم يدمج مع هذا العرف الملف الهدف:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" ... >
    ...
    <Import Project="..\..\..\..\build\OurBuildTargets.targets" />
      <ItemGroup>
        <LibFiles Include="$(OutputPath)$(AssemblyName).dll">
          <Visible>false</Visible>
        </LibFiles>
      </ItemGroup>
    <Target Name="BeforeClean" DependsOnTargets="DeleteLibFiles" />
    <Target Name="AfterBuild" DependsOnTargets="CopyLibFiles" />
</Project>

باختصار ، هذا بناء السيناريو الأول يقول MSBuild لتحميل عادتنا بناء السيناريو ، ثم يضيف الملف تم تجميعها إلى LibFiles ItemGroup ، وأخيرا العلاقات عادتنا بناء الأهداف ، DeleteLibFiles و CopyLibFiles, في عملية الإنشاء.وضعنا هذا الأمر في الحل وذلك فقط من الملفات التي يتم تحديثها على حذف/نسخ كل مشروع هو المسؤول عن أنها تملك ملفات (dll, الصور, إلخ).

آمل أن يساعد هذا.أعتذر إن أسأت فهم ما تعنيه خارج المكان بناء نظام وهذا هو عديمة الفائدة تماما لك!

نصائح أخرى

هل هناك طريقة يمكنني تحديد ماكرو دليل واستخدامها في مسار الإخراج

هل نظرت إلى ما قبل بناء و بعد بناء الأحداث من المشروع ؟

في الواقع, قبل بناء و بعد بناء ويبدو أن الأحداث فقط مكان لإضافة دفعة نوع ملف الأوامر.هذا لن يساعدني لإعداد معيار بناء الدلائل لدينا مشاريع للأسف.وبعد هذه الأحداث تخلق الملفات الدفعية يبدو جدا 1980 نهج اللغة الحديثة مثل C#, المنظمة البحرية الدولية.

بعد حفر بعض أكثر, وتجريب, لقد وجدت أنه يمكنك إضافة <Import> التوجيه إلى الخاص بك .الملف csproj.عند القيام بذلك ، IDE ينبثق مربع حوار تحذير بأن هناك غير آمنة نقطة الدخول في المشروع الخاص بك - ولكن يمكنك تجاهل هذا و يمكنك جعلها لا تظهر في كل طريق تعديل إدخال التسجيل الواضح.لذلك هذا من شأنه أن يعطي لي طريقة للحصول على المتغيرات التي تحتوي على دليل مسارات أنا بحاجة إلى .الملف csproj.

الآن للحصول على مسار الإخراج للإشارة إلى أنه - للأسف عند إضافة مثل سلسلة "$(MySpecialPath)/تصحيح" إلى مسار الإخراج حقل حفظ المشروع ، $ و () حرف يتم تحويلها إلى عرافة ، و الملف الخاص بك الحصول على وضعها في تصحيح الدليل تحت دليل المسمى "$(MySpecialPath)".Arrgghh.إذا كان يمكنك تحرير .csproj الملف في محرر نص ، يمكنك تعيين هذا بشكل صحيح ومع ذلك ، يبدو أن العمل طالما <Import> الوسم يظهر قبل <PropertyGroup> التي تحتوي على مسار الإخراج.

لذلك أعتقد أن الحل بالنسبة لي سيكون لإنشاء معيار OurTeam.أهداف MsBuild الملف في موقع موحد ، إضافة مثبت على تغيير التسجيل حتى لا العلم التحذيرات ، ومن ثم إنشاء مخصص قوالب المشروع أن <Import> هذا الملف ، وأيضا تعيين مسار الإخراج إلى استخدام خصائص محددة في OurTeam.الأهداف الملف.للأسف, هذا هو المزيد من العمل و أقل أناقة حل من صفحة الخصائص الميراث آلية في C++.

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