سؤال

لدي خاصية في msbuild لتمثيل الدليل فوق msbuildprojectdirectory:

<PropertyGroup>
    <BuildDir>$(MSBuildProjectDirectory)\..</PRSBuildDir>
</PropertyGroup>

أحتاج بعد ذلك إلى استخدام هذه الخاصية ، لكنني بحاجة إلى تنظيف سلسلة الدليل حتى لا تشمل ... بمعنى آخر ، أحتاج إلى .. تقييم ، بحيث إذا كان ملف المشروع الحالي في C:\Test\Tom\MyDir, ، ثم أحتاج إلى خاصية تحتوي على السلسلة C:\Test\Tom.

السبب الذي أسأله هو أنني أحاول تشغيل أمر مثل هذا:

msiexec /passive /i "D:\Build\2.3.84.40394\Deployment\..\Vendor\LogParser.msi"

لكنه يشكو من الطريق إلى MSI: This installation package could not be opened. Verify that the package exists and that you can access it, or contact the application vendor to verify that this is a valid Windows Installer package.

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

المحلول

هناك تحويل المهمة, ، هذا أي استخدام؟

نصائح أخرى

أفضل طريقة حصلت عليها الآن هي أدناه ، لكنني كنت أتساءل عما إذا كان هناك طريقة أفضل ..

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <PropertyGroup>
        <BuildDir>$(MSBuildProjectDirectory)\..</BuildDir>
    </PropertyGroup>

    <Target Name="Test">
        <ItemGroup>
            <CleanBuildDir Include="$(BuildDir)" />
        </ItemGroup>

        <PropertyGroup>
            <BuildDir>%(CleanBuildDir.FullPath)</BuildDir>
        </PropertyGroup>

        <Message Text="$(BuildDir)" />
    </Target>
</Project>

إذا كنت تريد أن يكون تم تقييم البطاقة البرية, ، يجب استخدم البند بدلا من الممتلكات.

<ItemGroup>
  <BuildDir Include="$(MSBuildProjectDirectory)\.."/>
</ItemGroup>

<Target Name="ExecMSIExec">
  <Exec Command="msiexec /passive /i %(BuildDir.FullPath)\Vendor\LogParser.msi"/>
</Target>

(حذفت إجابتي لأنني لم أر أن توم قد أجاب بنفس الطريقة بالضبط!)

بالمناسبة ، لماذا لا تقوم بتعيين سمة "WorkDirectory" لمهمة EXEC حيث يمكنك الاتصال بالفعل MSIEXEC لتكون موقع MSI الخاص بك - وبهذه الطريقة لن تواجه مشكلات طول المسار

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