我正在尝试在C#项目文件中使用ILMerge将一些dll组合成一个dll(由于各种原因)。我已从https://github.com/loresoft/msbuildtasks下载了MSBuild社区任务,其中包含ILMerge的目标。
尝试使用ILMerge目标时,我收到了这个模糊的错误消息:
"C:\svn\AwaitingFeedbackCanceller.csproj" (rebuild target) (1) ->
(Zip target) ->
C:\svn\AwaitingFeedbackCanceller.csproj(150,5): error MSB6001: Invalid command line switch for "ILMerge.exe".
Value cannot be null.\r
C:\svn\AwaitingFeedbackCanceller.csproj(150,5): error MSB6001: Parameter name: path1
这些是我项目文件中的相关位:
<PropertyGroup>
<ZipFileName>$(ProjectName)-$([System.String]::Copy('$(projectguid)').Trim('\{\}')).zip</ZipFileName>
<MergedFile>$(ProjectDir)$(ProjectName).dll</MergedFile>
<logFile>$(ProjectDir)$(ProjectName).log</logFile>
<TargetPlatformVersion>v4</TargetPlatformVersion>
<TargetPlatformDirectory>C:\Windows\Microsoft.NET\Framework64\v4.0.30319</TargetPlatformDirectory>
</PropertyGroup>
<ItemGroup>
<inputAssemblies Include="$(ProjectDir)$(OutDir)$(AssemblyName).dll" />
<inputAssemblies Include="$(ProjectDir)$(OutDir)AeriandiGeminiPluginBase.dll" />
<allowDuplicates Include="$(ProjectDir)$(OutDir)ClassAB" />
</ItemGroup>
<Target Name="Merge">
<Message Importance="high" Text="Merging assemblies" />
<ILMerge InputAssemblies="@(inputAssemblies)" AllowDuplicateTypes="@(allowDuplicates)" OutputFile="$(MergedFile)" LogFile="$(logFile)" DebugInfo="true" XmlDocumentation="true" TargetPlatformVersion="$(TargetPlatformVersion)" TargetPlatformDirectory="$(TargetPlatformDirectory)" />
</Target>
由于我需要自动部署多个项目,这真的开始让我感到高兴。
有人能指出我做错了吗?
干杯,
阿什利
披露:我还在Github上为这个项目添加了这个问题,但没有回复 - https://github.com/loresoft/msbuildtasks/issues/42。
答案 0 :(得分:1)
为了实现这一点,我必须安装IlMerge MSI。我试图使用指定了ToolPath的NuGet版本,但由于某种原因它仍然无法找到IlMerge。
安装msi版本后,它运行正常。
http://www.microsoft.com/en-us/download/details.aspx?id=17630
答案 1 :(得分:0)
我遇到了与您上面描述的相同的问题,但是通过将此ToolPath添加到ILMerge任务的NuGet版本,我能够使其工作:
<ILMerge ToolPath="packages\ilmerge.2.13.0307" ...