【发布时间】:2021-11-21 20:10:55
【问题描述】:
我已经做了一个多星期了,但我仍然没有运气。
简而言之,这就是我想要实现的目标 -
我有一个 Nuget 库,其中包含两个 库使用的 .exe 文件。问题是,当库被拉入主项目时,exe 要么没有正确放入输出文件夹,要么它们的路径变成了主项目路径而不是 nuget/lib 路径。
图书馆
这是.csproj
<ItemGroup>
<Content Include="Drivers/**">
<Pack>true</Pack>
<PackagePath>lib\net5.0\Drivers\</PackagePath>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<CopyToPublishDirectory>Always</CopyToPublishDirectory>
<PackageCopyToOutput>Always</PackageCopyToOutput>
</Content>
</ItemGroup>
我如何在库代码中使用 exe -
var path = $"{AppDomain.CurrentDomain.BaseDirectory}Drivers";
这成功打包了我的项目,并允许我在打包管道上运行单元测试时使用 exe。下载到新项目时,它会创建一个带有路径的 nuget 目录
{USER}\.nuget\packages\drivers.library\1.0.X
在那个目录中有三个文件夹
--content (contains testhost stuff)
--contentFiles (contains testhost stuff)
--lib
\ net5.0
\ Drivers
\ exe1 and exe2
主要项目
所以导入库后
<PackageReference Include="Drivers.Framework" Version="1.0.8" />
我希望根据库的 .csproj 文件中的设置将“Drivers”文件夹构建到主项目的 OutputDirectory 中。
我还预计在库中使用 AppDomain.CurrentDomain.BaseDirectory 会默认为 .nuget 目录中 .dll 所在的位置。
但是,显然不是这样的。
就尝试获取 .dll 位置而言,我已经尝试过 -
"1" + Assembly.GetExecutingAssembly().Location;
"2" + Assembly.GetExecutingAssembly().CodeBase;
"3" + AppDomain.CurrentDomain.BaseDirectory;
"4" + AppDomain.CurrentDomain.DynamicDirectory;
"5" + AppDomain.CurrentDomain.FriendlyName;
"6" + AppDomain.CurrentDomain.RelativeSearchPath;
但这一切都指向主项目的位置,而不是库。
至于将 Drivers 文件夹从 .nuget 目录获取到主项目的输出文件夹。我在 csproj 中尝试了一些递归,但我只能获取依赖项 .dll 而不是 exes。我也看到有些人使用 powershell,但如果可能的话,我想绝对避免这种情况。
如果有人知道如何将 nuget/lib/Drivers 文件夹构建到主项目的输出文件夹中,我将永远感激不尽。
谢谢你们。
【问题讨论】:
-
需要更多的关注。可以提供repro吗?仅供参考 - 您对预期结果的许多假设是不正确的并且按预期工作。
标签: c# nuget nuget-package csproj