Я пишу простое расширение, позволяющее MSBuild компилировать исходные файлы Solidity.
Моя цель - когда мой solidproj
компилируется, он запускает определенный исполняемый файл, который создает несколько файлов bin
и abi
, которые следует скопировать в целевой каталог. Звучит просто, однако на практике это не так.
В настоящее время у меня есть следующие цели:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
...
<Import Project="$(MSBuildToolsPath)\Microsoft.Common.CurrentVersion.targets" />
<Target Name="CreateManifestResourceNames" />
<Target Name="CoreCompile">
<Exec Command='$(RunCommand) "-o @(OutDir) @(SolCompile)" $(RunCommandArguments)' WorkingDirectory="$(RunWorkingDirectory)" />
</Target>
</Project>
Это почти работает, за исключением того, что он ожидает, что будет скомпилирован один файл exe
<!-- Copy the build product (.dll or .exe). -->
<Copy
SourceFiles="@(IntermediateAssembly)"
DestinationFolder="$(OutDir)"
SkipUnchangedFiles="$(SkipCopyUnchangedFiles)"
OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
Retries="$(CopyRetryCount)"
RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"
UseHardlinksIfPossible="$(CreateHardLinksForCopyFilesToOutputDirectoryIfPossible)"
UseSymboliclinksIfPossible="$(CreateSymbolicLinksForCopyFilesToOutputDirectoryIfPossible)"
Condition="'$(CopyBuildOutputToOutputDirectory)' == 'true' and '$(SkipCopyBuildProduct)' != 'true'"
>
<Output TaskParameter="DestinationFiles" ItemName="MainAssembly"/>
<Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>
</Copy>
Ошибка MSB3030 Не удалось скопировать файл «obj\Debug\Solidity9.exe», так как он не найден. Solidity9 C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets 4118
Как я могу попросить его скопировать все это специальное расширение на вывод?
Весь проект находится на github здесь.