我正在使用Visual Studio 2015进行C#项目,使用NuGet进行包管理。作为一个参考,我想在我修复修复时暂时使用本地版本,而不是发布版本。最好的方法是什么?
如果我使用外部SVN,我会将新的本地构建的副本放入外部参考文件夹中,然后进行设置。其他包管理软件(如CocoaPods)将允许我指向本地目录来解析引用。使用NuGet,它看起来没有任何机制。
当我尝试将新DLL放在packages
文件夹中的包引用上时,我在Visual Studio中会出现不一致的行为。我的构建将失败,有数百个错误,其中大多数错误很快就会从错误列表中消失。我最后留下了一个警告,告诉我它无法解决我试图替换的程序集的引用(虽然引用的属性确实表明它正在找到我的新版本)。 / p>
答案 0 :(得分:8)
我发现以下解决方法对我有用:
首先,我从解决方案的上下文菜单中禁用“NuGet Package Restore”。
之后我转到packages文件夹,搜索我要替换的包。从这个包中我获取版本号,并使用这个确切的版本号来构建我想要交换的DLL。
之后我可以用这个新建的dll交换packages文件夹中的dll。构建项目现在使用这个新的DLL。
设置一次后,我可以轻松构建新的dll,并将它们复制到packages文件夹中。
答案 1 :(得分:6)
我们使用此工具取得了巨大成功。它易于使用和工作。
答案 2 :(得分:3)
在 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 解决方案 > 属性 > 配置属性。对于配置“发布”,取消选中项目“library.csproj”。现在,当您的代码在调试中构建时,它将构建项目引用。当它在发布中内置时,它不会尝试构建它。
当我们发布时,请确保您使用“发布”。这是有效的,因为当您发布时,它将无法从我们在 Bookstore.csproj 中配置的路径“..\..\Library\library.csproj”中找到“Solutions\Library\library.csproj”。
您不必使用 docker 来实现此目的,但作为此处的示例 是我们的 dockerfile 将运行的命令
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 .
答案 3 :(得分:2)
DNT (DotNetTools) 是最新的,并且具有从包切换到本地项目引用并再次返回的命令。
dnt switch-to-projects
dnt switch to packages