我有一个netcore应用程序取决于我的自定义项目。因为我无法直接引用它,所以我编写了将这些文件复制到输出的postbuildevents:
xcopy "$(SolutionDir)Ethereum.Contracts\bin\$(ConfigurationName)\*.abi" "$(TargetDir)" /Y /I
xcopy "$(SolutionDir)Ethereum.Contracts\bin\$(ConfigurationName)\*.bin" "$(TargetDir)" /Y /I
当我构建和运行项目时,它工作正常,但是当运行
publish
命令时,它不包含这些文件。如何做呢?我也尝试了this approach,但是
AddPayloadsFolder
没有被调用。我的
csproj
:<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\Dependencies\Dependencies.csproj" />
</ItemGroup>
<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="log4net.config">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="xcopy "$(SolutionDir)Ethereum.Contracts\bin\$(ConfigurationName)\*.abi" "$(TargetDir)" /Y /I


xcopy "$(SolutionDir)Ethereum.Contracts\bin\$(ConfigurationName)\*.bin" "$(TargetDir)" /Y /I" />
</Target>
<Target Name="AddPayloadsFolder" AfterTargets="AfterPublish">
<Exec Command="xcopy "$(TargetDir)\*.abi" "$(PublishDir)" /Y /I


xcopy "$(TargetDir)\*.bin" "$(PublishDir)" /Y /I" />
</Target>
</Project>
最佳答案
当您启动dotnet publish
命令时,未定义$(SolutionDir)
宏。结果,使用不正确的源路径启动了xcopy
。
解决方案宏丢失的问题是described here,它仍处于打开状态。我不确定它是否会被修复,因为$(SolutionDir)
是特定于IDE的宏。
要解决您的问题,您可以通过$(SolutionDir)
开关将dotnet publish
宏的值传递给/p
命令:
您还应该在$(SolutionDir)
宏后面添加反斜杠:
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="xcopy "$(SolutionDir)\Ethereum.Contracts\bin\$(ConfigurationName)\*.abi" "$(TargetDir)" /Y /I


xcopy "$(SolutionDir)\Ethereum.Contracts\bin\$(ConfigurationName)\*.bin" "$(TargetDir)" /Y /I" />
</Target>
UPDATE (关于
AddPayloadsFolder
目标):AddPayloadsFolder
目标定义为<Target Name="AddPayloadsFolder" AfterTargets="AfterPublish">
由于
AfterTargets
的dotnet publish
的正确值是Publish
而不是AfterPublish
,因此不会执行。我没有找到有关此事实的明确文档,但是在this issue中提到了该文档。还可以考虑将用换行符分隔的几个
xcopy
命令替换为多个命令。当我最终执行了AddPayloadsFolder
目标时,我收到了由\r
分隔符附加到命令行引起的错误。总结以上所有内容,以下是调整后的
PostBuild
和AddPayloadsFolder
目标:<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="xcopy "$(SolutionDir)\Ethereum.Contracts\bin\$(ConfigurationName)\*.abi" "$(TargetDir)" /Y /I" />
<Exec Command="xcopy "$(SolutionDir)\Ethereum.Contracts\bin\$(ConfigurationName)\*.bin" "$(TargetDir)" /Y /I" />
</Target>
<Target Name="AddPayloadsFolder" AfterTargets="Publish">
<Exec Command="xcopy "$(TargetDir)*.abi" "$(PublishDir)" /Y /I" />
<Exec Command="xcopy "$(TargetDir)*.bin" "$(PublishDir)" /Y /I" />
</Target>
关于.net - dotnet发布包含额外的文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49573010/