MSBuild için bir satır içi görev yazıyorum. System.ServiceProcess.dll
için bir başvuru gerektirir. doğrusu AncakMSBuild satır içi görev başvurusu parantez kaçıyor, bazen
<UsingTask
TaskName="MyTask"
TaskFactory="CodeTaskFactory"
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<Task>
<Reference Include="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.ServiceProcess.dll" />
<Code Type="Fragment" Language="cs">...working fine...</Code>
</Task>
</UsingTask>
, ben ederim sabit kodlamamanız bu yolu:
Ben koda böyle System.ServiceProcess.dll dosyasının yolunu, eğer görev harika çalışıyor.
Yalnızca <Reference Include="System.ServiceProcess.dll" />
kullanırsam bir hata iletisi alırım: MSB3755: Could not find reference "System.ServiceProcess.dll"
, bu yüzden burada tam yolu kullanmam gerektiğini düşünüyorum.
$(FrameworkPathOverride)
özellik zaten doğru yolu içerir, bu yüzden o kullanmaya çalıştı:
<Reference Include="$(FrameworkPathOverride)\System.ServiceProcess.dll" />
Ama bu bana bir hata verir: o %28x86%29
içine (x86)
nasıl kaçtı
C:\path\to\project.csproj(93,3): error MSB3754: The reference assembly "C:\Program Files %28x86%29\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.ServiceProcess.dll" is invalid. "The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047)"[C:\path\to\project.csproj]
Bildirimi.
Özellikle, bu yalnızca $(FrameworkPathOverride)
için görünüyor. Kendi mülkümü tanımlarım ve bunun yerine kullanırsam, bu özellik de $(FrameworkPathOverride)
referansı olmadıkça çalışır. Başka bir deyişle, bu işleri (ama hala beni yolunu sabit kodlama vardır):
<PropertyGroup>
<MyPath>$(FrameworkPathOverride)</MyPath>
</PropertyGroup>
Sadece için:
<PropertyGroup>
<MyPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5</MyPath>
</PropertyGroup>
// (later, inside <Task />)
<References Include="$(MyPath)\System.ServiceProcess.dll" />
Ancak bu raporlar %28x86%29
için bir yol aramaya aynı hata ile başarısız tekmeler, ben de aynı hatayla başarısız bu varyasyon, denedik: Ayrıca
<PropertyGroup>
<MyPath>$([System.Convert]::ToString("$(FrameworkPathOverride)"))</MyPath>
</PropertyGroup>
, her durumda, <Message Text="$(FrameworkPathOverride)" />
veçıktısı 10 aynıdır. <Message />
görevi, içinde parantezden kaçan numaralı değil, <Reference Include="..." />
ise'dur. Hmm.
(x86)
neden <Reference />
içinde %28x86%29
haline gelir, ancak <Message />
içinde değil?
Neden $(FrameworkPathOverride)
için ve $(MyPath)
için değil?
$(FrameworkPathOverride)
başvuruyorsa neden $(MyPath)
için başlıyor?
Bu yolu kodlamayı nasıl önleyebilirim?
Çalışmak için bile kodlanmış yolunu alamayan ben <' gibi buna sahip Referans = Görevimdeki "$ (SolutionDir) ImageTextWriter \ bin \ $ (Yapılandırma) \ ImageTextWriter.dll" /> 'i, ancak projeyi oluşturmak her zaman dosyanın bulamadığını söyler.Teşekkür fikirim? – dotNET