gpt4 book ai didi

.net - dotnet发布包含额外的文件

转载 作者:行者123 更新时间:2023-12-04 21:20:01 27 4
gpt4 key购买 nike

我有一个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 &quot;$(SolutionDir)Ethereum.Contracts\bin\$(ConfigurationName)\*.abi&quot; &quot;$(TargetDir)&quot; /Y /I&#xA;&#xA;&#xD;&#xA;xcopy &quot;$(SolutionDir)Ethereum.Contracts\bin\$(ConfigurationName)\*.bin&quot; &quot;$(TargetDir)&quot; /Y /I" />
</Target>

<Target Name="AddPayloadsFolder" AfterTargets="AfterPublish">
<Exec Command="xcopy &quot;$(TargetDir)\*.abi&quot; &quot;$(PublishDir)&quot; /Y /I&#xA;&#xA;&#xD;&#xA;xcopy &quot;$(TargetDir)\*.bin&quot; &quot;$(PublishDir)&quot; /Y /I" />
</Target>

</Project>

最佳答案

当您启动dotnet publish命令时,未定义$(SolutionDir)宏。结果,使用不正确的源路径启动了xcopy

解决方案宏丢失的问题是described here,它仍处于打开状态。我不确定它是否会被修复,因为$(SolutionDir)是特定于IDE的宏。

要解决您的问题,您可以通过$(SolutionDir)开关将dotnet publish宏的值传递给/p命令:

dotnet publish -c Release -r win-x64 /p:SolutionDir="D:\projects\SolutionDir"



您还应该在 $(SolutionDir)宏后面添加反斜杠:
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="xcopy &quot;$(SolutionDir)\Ethereum.Contracts\bin\$(ConfigurationName)\*.abi&quot; &quot;$(TargetDir)&quot; /Y /I&#xA;&#xA;&#xD;&#xA;xcopy &quot;$(SolutionDir)\Ethereum.Contracts\bin\$(ConfigurationName)\*.bin&quot; &quot;$(TargetDir)&quot; /Y /I" />
</Target>

UPDATE (关于 AddPayloadsFolder目标):
AddPayloadsFolder目标定义为
<Target Name="AddPayloadsFolder" AfterTargets="AfterPublish">

由于 AfterTargetsdotnet publish的正确值是 Publish而不是 AfterPublish,因此不会执行。我没有找到有关此事实的明确文档,但是在 this issue中提到了该文档。

还可以考虑将用换行符分隔的几个 xcopy命令替换为多个命令。当我最终执行了 AddPayloadsFolder目标时,我收到了由 \r分隔符附加到命令行引起的错误。

总结以上所有内容,以下是调整后的 PostBuildAddPayloadsFolder目标:
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="xcopy &quot;$(SolutionDir)\Ethereum.Contracts\bin\$(ConfigurationName)\*.abi&quot; &quot;$(TargetDir)&quot; /Y /I" />
<Exec Command="xcopy &quot;$(SolutionDir)\Ethereum.Contracts\bin\$(ConfigurationName)\*.bin&quot; &quot;$(TargetDir)&quot; /Y /I" />
</Target>

<Target Name="AddPayloadsFolder" AfterTargets="Publish">
<Exec Command="xcopy &quot;$(TargetDir)*.abi&quot; &quot;$(PublishDir)&quot; /Y /I" />
<Exec Command="xcopy &quot;$(TargetDir)*.bin&quot; &quot;$(PublishDir)&quot; /Y /I" />
</Target>

关于.net - dotnet发布包含额外的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49573010/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com