如何用本地构建临时替换 NuGet 引用
How to temporarily replace a NuGet reference with a local build
我正在使用 Visual Studio 2015 开发一个 C# 项目,使用 NuGet 进行包管理。作为参考,我想在迭代修复时暂时使用本地构建,而不是发布版本。实现此目标的最佳方法是什么?
如果我使用的是外部 SVN,我会将本地构建的新副本放入外部引用的文件夹中,然后进行设置。其他包管理软件(如 CocoaPods)允许我指向本地目录来解析引用。使用 NuGet,看起来没有任何机制。
当我尝试将我的新 DLL 放到 packages
文件夹中的包引用上时,我在 Visual Studio 中出现不一致的行为。我的构建将因数百个错误而失败,其中大部分很快就会从错误列表中消失。我最终留下了一条警告,告诉我它无法解析对我要替换的程序集的引用(尽管引用的属性确实表明它正在寻找我的新版本)。
您可以创建自己的 Nuget 提要(简单的本地文件夹 + 一些配置)
在此处阅读更多内容Hosting Your Own NuGet Feeds
我发现以下解决方法对我有用:
首先,我从解决方案的上下文菜单中禁用“NuGet 包还原”。
之后,我进入 %HOMEPATH%\.nuget\packages
文件夹,搜索我要替换的包。我从这个包中获取版本号,并使用这个确切的版本号来构建我想要交换的 dll。
之后我可以将packages文件夹中的dll与这个新建的dll交换。现在构建项目使用这个新的 dll。
设置一次后,我可以轻松构建新的 dll,并将它们复制到 packages 文件夹中。
我们使用此工具取得了巨大的成功。它易于使用和工作。
在 VS2019 中,这是您可以有条件地在项目引用和包引用之间切换构建的方法。我们将其用于 docker 个容器
打开项目解决方案“Solutions\Bookstore\Bookstore.sln”,其中包含将引用 nuget
的项目“Bookstore.csproj”
添加一个解决方案文件夹,例如“nuget”并添加现有项目“Solutions\Library\library.csproj”
将条件项组添加到项目文件“Bookstore.csproj”
<ItemGroup Condition="Exists('..\..\Library\library.csproj')">
<ProjectReference Include="..\..\Library\library.csproj" />
</ItemGroup>
<ItemGroup Condition="!Exists('..\..\Library\library.csproj')">
<PackageReference Include="library" Version="1.0.0" />
</ItemGroup>
在解决方案资源管理器中,右键单击 Bookstore 解决方案 > 属性 > 配置属性。对于配置 'Release',取消选中项目 'library.csproj'。现在,当您的代码在调试中构建时,它将构建项目引用。当它在发行版中构建时,它不会尝试构建它。
我们发布时请务必使用 'Release'。这是有效的,因为当您发布时,它将无法从我们在 Bookstore.csproj“..\..\Library\library.csproj”中配置的路径中找到“Solutions\Library\library.csproj”。
你不必使用 docker 来工作,但这里作为一个例子
是我们的 docker 文件将要 运行
的命令
WORKDIR "/Solutions/Bookstore"
RUN dotnet restore
RUN dotnet build -c Release -o /app
FROM build AS publish
RUN dotnet publish "Bookstore.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
DNT (DotNetTools) 是最新的并且具有从包切换到本地项目引用并再次返回的命令。
dnt switch-to-projects
dnt switch to packages
我正在使用 Visual Studio 2015 开发一个 C# 项目,使用 NuGet 进行包管理。作为参考,我想在迭代修复时暂时使用本地构建,而不是发布版本。实现此目标的最佳方法是什么?
如果我使用的是外部 SVN,我会将本地构建的新副本放入外部引用的文件夹中,然后进行设置。其他包管理软件(如 CocoaPods)允许我指向本地目录来解析引用。使用 NuGet,看起来没有任何机制。
当我尝试将我的新 DLL 放到 packages
文件夹中的包引用上时,我在 Visual Studio 中出现不一致的行为。我的构建将因数百个错误而失败,其中大部分很快就会从错误列表中消失。我最终留下了一条警告,告诉我它无法解析对我要替换的程序集的引用(尽管引用的属性确实表明它正在寻找我的新版本)。
您可以创建自己的 Nuget 提要(简单的本地文件夹 + 一些配置)
在此处阅读更多内容Hosting Your Own NuGet Feeds
我发现以下解决方法对我有用:
首先,我从解决方案的上下文菜单中禁用“NuGet 包还原”。
之后,我进入 %HOMEPATH%\.nuget\packages
文件夹,搜索我要替换的包。我从这个包中获取版本号,并使用这个确切的版本号来构建我想要交换的 dll。
之后我可以将packages文件夹中的dll与这个新建的dll交换。现在构建项目使用这个新的 dll。
设置一次后,我可以轻松构建新的 dll,并将它们复制到 packages 文件夹中。
我们使用此工具取得了巨大的成功。它易于使用和工作。
在 VS2019 中,这是您可以有条件地在项目引用和包引用之间切换构建的方法。我们将其用于 docker 个容器
打开项目解决方案“Solutions\Bookstore\Bookstore.sln”,其中包含将引用 nuget
的项目“Bookstore.csproj”添加一个解决方案文件夹,例如“nuget”并添加现有项目“Solutions\Library\library.csproj”
将条件项组添加到项目文件“Bookstore.csproj”
<ItemGroup Condition="Exists('..\..\Library\library.csproj')"> <ProjectReference Include="..\..\Library\library.csproj" /> </ItemGroup> <ItemGroup Condition="!Exists('..\..\Library\library.csproj')"> <PackageReference Include="library" Version="1.0.0" /> </ItemGroup>
在解决方案资源管理器中,右键单击 Bookstore 解决方案 > 属性 > 配置属性。对于配置 'Release',取消选中项目 'library.csproj'。现在,当您的代码在调试中构建时,它将构建项目引用。当它在发行版中构建时,它不会尝试构建它。
我们发布时请务必使用 'Release'。这是有效的,因为当您发布时,它将无法从我们在 Bookstore.csproj“..\..\Library\library.csproj”中配置的路径中找到“Solutions\Library\library.csproj”。
你不必使用 docker 来工作,但这里作为一个例子 是我们的 docker 文件将要 运行
的命令WORKDIR "/Solutions/Bookstore" RUN dotnet restore RUN dotnet build -c Release -o /app FROM build AS publish RUN dotnet publish "Bookstore.csproj" -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app .
DNT (DotNetTools) 是最新的并且具有从包切换到本地项目引用并再次返回的命令。
dnt switch-to-projects
dnt switch to packages