我正在使用Visual Studio 2015进行C#项目,使用NuGet进行包管理.对于一个参考,我想在迭代修复时暂时使用本地构建,而不是发布的版本.实现这一目标的最佳方法是什么?
如果我使用外部SVN,我会将新的本地构建的副本放入外部引用的文件夹中,然后进行设置.其他包管理软件(如CocoaPods)将允许我指向本地目录来解析引用.使用NuGet,看起来没有任何机制.
当我尝试将新的DLL放在packages文件夹中的包引用上时,我在Visual Studio中得到了不一致的行为.我的构建将失败,有数百个错误,其中大多数错误很快就会从错误列表中消失.我最后留下了一个警告,告诉我它无法解析我正在尝试替换的程序集的引用(虽然引用的属性确实表明它正在找到我的新版本).
C R*_*lph 15
在 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>
Run Code Online (Sandbox Code Playgroud)
在解决方案资源管理器中,右键单击 Bookstore 解决方案 > 属性 > 配置属性。对于配置“Release”,取消选中项目“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 .
Run Code Online (Sandbox Code Playgroud)
Mat*_*ias 10
我发现以下解决方法对我有用:
首先,我从解决方案的上下文菜单中禁用"NuGet Package Restore".
之后我转到packages文件夹,搜索我要替换的包.从这个包中我得到版本号,并使用这个确切的版本号来构建我想要交换的DLL.
之后我可以用这个新建的dll交换packages文件夹中的dll.构建项目现在使用这个新的DLL.
设置一次后,我可以轻松构建新的dll,并将它们复制到packages文件夹中.
我们使用这个工具取得了很大的成功.它易于使用和工作.
您可以创建自己的Nuget提要(简单的本地文件夹+一些配置)
在此处阅读更多内容托管自己的NuGet提要
DNT (DotNetTools) 是最新的,并且具有从包切换到本地项目引用并再次返回的命令。
dnt switch-to-projects
dnt switch to packages
https://github.com/RicoSuter/DNT#switch-to-projects
.csproj在项目文件中:
<ItemGroup Condition="'$(Configuration)'=='Debug'">
<ProjectReference Include="../../../Library1/Library1.csproj" />
<ProjectReference Include="../../../Library2/Library2.csproj" />
</ItemGroup>
<ItemGroup Condition="'$(Configuration)'!='Debug'">
<PackageReference Include="Library1" Version="1.0.0" />
<PackageReference Include="Library2" Version="1.0.0" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
开发中:项目在调试模式下编译,因此将使用项目引用。
在生产环境中(CI 服务器、docker 容器):项目以发布模式编译,因此将使用包引用。
| 归档时间: |
|
| 查看次数: |
6038 次 |
| 最近记录: |