मैं एमएसबिल्ड के लिए एक इनलाइन कार्य लिख रहा हूं। इसे System.ServiceProcess.dll
के संदर्भ की आवश्यकता है। होगाएमएसबिल्ड इनलाइन कार्य संदर्भ कंस्ट्रैसिस से बच रहा है, कभी-कभी
<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>
हालांकि, मैं नहीं बल्कि हार्ड-कोड नहीं है कि पथ:
अगर मैं कड़ी मेहनत से कोड System.ServiceProcess.dll फ़ाइल का पथ, इस तरह काम अच्छा काम करता है।
यदि मैं सिर्फ <Reference Include="System.ServiceProcess.dll" />
का उपयोग करता हूं, तो मुझे एक त्रुटि मिलती है: MSB3755: Could not find reference "System.ServiceProcess.dll"
, इसलिए मुझे लगता है कि मुझे यहां पूरा पथ उपयोग करना है।
$(FrameworkPathOverride)
संपत्ति पहले से ही सही रास्ता होता है, इसलिए मुझे लगता है कि उपयोग करने के लिए करने की कोशिश की:
<Reference Include="$(FrameworkPathOverride)\System.ServiceProcess.dll" />
लेकिन वह मुझे एक त्रुटि देता है:
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]
सूचना है कि यह कैसे %28x86%29
में (x86)
भाग निकले।
विशेष रूप से, ऐसा लगता है कि यह केवल $(FrameworkPathOverride)
के लिए ऐसा करता है। यदि मैं अपनी संपत्ति को परिभाषित करता हूं और इसके बजाए इसका उपयोग करता हूं, तो यह ठीक काम करता है, जब तक कि यह संपत्ति $(FrameworkPathOverride)
का संदर्भ न दे। दूसरे शब्दों में, यह काम करता है (लेकिन अभी भी मुझे पथ हार्ड-कोड है):
<PropertyGroup>
<MyPath>$(FrameworkPathOverride)</MyPath>
</PropertyGroup>
बस के लिए:
<PropertyGroup>
<MyPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5</MyPath>
</PropertyGroup>
// (later, inside <Task />)
<References Include="$(MyPath)\System.ServiceProcess.dll" />
बहरहाल, यह एक ही त्रुटि है कि रिपोर्ट %28x86%29
के लिए खोज एक पथ के साथ विफल रहता है किक, मैं भी इस बदलाव है, जो भी एक ही त्रुटि के साथ विफल करने की कोशिश की:
<PropertyGroup>
<MyPath>$([System.Convert]::ToString("$(FrameworkPathOverride)"))</MyPath>
</PropertyGroup>
इसके अलावा, सभी मामलों में, <Message Text="$(FrameworkPathOverride)" />
औरके उत्पादन 10 समान हैं। <Message />
कार्य $(FrameworkPathOverride)
के अंदर ब्रांडेसिस से बचने वाला है, लेकिन <Reference Include="..." />
है। हम्म।
(x86)
%28x86%29
<Reference />
के अंदर क्यों बनता है लेकिन <Message />
के अंदर नहीं?
यह $(FrameworkPathOverride)
के लिए क्यों होता है और $(MyPath)
के लिए नहीं होता है?
यह $(MyPath)
पर क्यों हो रहा है यदि यह $(FrameworkPathOverride)
का संदर्भ देता है?
मैं इस पथ को कड़ी-कोडिंग से कैसे बच सकता हूं?
मैं भी एक हार्ड-कोडेड पथ काम करने के लिए नहीं मिल सकता है मैं इसे पसंद' <है संदर्भ शामिल करें = "$ (SolutionDir) ImageTextWriter \ bin \ $ (कॉन्फ़िगरेशन) \ ImageTextWriter.dll" /> 'मेरे कार्य में, लेकिन प्रोजेक्ट का निर्माण हमेशा मुझे बताता है कि यह फ़ाइल नहीं ढूंढ सकता। कोई विचार? – dotNET