通过NuGet.config改变packages目录位置

作者:V君 发布于:2018-4-12 15:45 Thursday 分类:挖坑经验

TL;DR: 在解决方案文件旁边创建一个 NuGet.config 文件,里面指定 repositoryPath .


参考: M$DN 爆赞 


不扯,继续搬砖 (´∀((☆ミつ

标签: 软件开发 VisualStudio

评论(0) 引用(0) 浏览(109)

使用程序包管理控制台,高效地进行批量安装/更新/修复NuGet包

作者:V君 发布于:2017-8-27 20:24 Sunday 分类:折腾手记

TL;DR

准备好你的 packages.config 配置文件,可以从以前的项目中直接拷贝或自己写。

去程序包管理控制台执行 Update-Package 就能把配文件中的所有包的更新到最新版本。

接下来执行 Update-Package -Reinstall 把配置文件中的包装上。

如果你改变了目标框架,需要重新选择依赖库,可以再次执行 Update-Package -Reinstall。

 

听我扯扯:

在过去新建项目,添加 NuGet 包时只能去包管理器界面一个个手动搜索添加。

当改变了目标框架,只好一个个手动卸载再走一遍上述步骤。 要不要这么麻烦?

依旧喂狗到爆栈,找到批量安装更新全部包的方法,从此再也不需要这么麻烦手动安装了。


Update @ 2018-05-11:

为了更高效操作, 还可以通过指定项目来执行重新安装的操作, 通过 -ProjectName 参数

就不用每次都对整个解决方案重装 NuGet 包了, 参考来源:M¥文档.

完整命令示例: Update-Package -Reinstall -ProjectName bala.balaha

标签: 软件开发 VisualStudio

评论(0) 引用(0) 浏览(445)

让Release生成配置自动调用ILRepack将所有程序集混合到一个文件

作者:V君 发布于:2016-7-9 18:18 Saturday 分类:折腾手记

TL;DR?

先在NuGet添加ILRepack包,然后填上生成事件脚本

项目属性 - 生成事件 - 后期生成事件命令行 - 贴上类似下面的3行


if $(ConfigurationName) == Release if not exist "$(TargetDir)Packed" md "$(TargetDir)Packed"

if $(ConfigurationName) == Release $(ILRepack) /ndebug "/out:$(TargetDir)Packed\$(TargetFileName)" "$(TargetPath)" LibRefence.dll

if $(ConfigurationName) == Release if exist "$(TargetDir)Packed\$(TargetFileName).config" del "$(TargetDir)Packed\$(TargetFileName).config"


每行前面相同的 if 用来确认当前是否以 Release 配置生成 (好像这是废话)

 要是M¥能给生成事件指定配置就不用写得这么繁琐了。

第一行:检查输出路径下是否有 Packed 文件夹,没有则创建。用来放我们混合好的输出。

 这行可以直接拿去用。

第二行:调用 ILRepack ,

 如果有引用程序集,需要加到后边,比如例子中标出蓝背景的程序集文件名。

 可以参照Update2的命令自动获取所有dll文件名!DLL_LIST!代替即可

 这行走完之后 Packed 底下就会得到 exe/config 文件了。

第三行:删除多余的config文件

 如果不需要config文件,可以留下第三行。ILRepack会把配置文件带到输出目录。


注意:这仅仅只是把程序集混合在一起,不带压缩。

 和 ILMerge 作用一样,不过用了更先进的 ILRepack 。

 如果你想要压缩可以试试 Aio1ef 这货。


Update1 at 2017-10-16

 路径用双引号括起来了, 一些同学可能喜欢在默认路径存放项目, 导致路径出现空格报错.

Update2 at 2018-02-06

 获取exe旁边所有dll文件可以通过以下命令实现:

    if $(ConfigurationName) == Release setlocal enabledelayedexpansion enableextensions
    if $(ConfigurationName) == Release set DLL_LIST=
    if $(ConfigurationName) == Release for %%x in ($(TargetDir)*.dll) do set DLL_LIST=!DLL_LIST! "%%x"
    if $(ConfigurationName) == Release echo dlls: !DLL_LIST!

标签: 软件开发 C# 程序打包 VisualStudio

评论(0) 引用(0) 浏览(938)

改变VisualStudio项目的obj和bin输出路径

作者:V君 发布于:2016-6-30 11:08 Thursday 分类:折腾手记

TL;DR 

参考[爆栈帖子1][爆赞帖子2][M¥DN]

更改配置文件根节点Project底下PropertyGroup\BaseIntermediateOutputPath可以改变obj目录

例如 Z:\U00ST\$(MSBuildProjectName)\obj\ 写成如下

<BaseIntermediateOutputPath>Z:\U00ST\$(MSBuildProjectName)\obj\</BaseIntermediateOutputPath>

就能把obj文件带去Z:\U00ST\Abc\obj\默认情况下里面还会按生成配置创建Debug/Release目录.

本例使用了宏MSBuildProjectName,能替换成项目文件不带扩展名Abc.csproj(Abc.vbproj)的abc


改变bin目录已经在项目属性自带了,不过还可以玩点花样

同样位置创建BaseOutputPath节点 <BaseOutputPath>Z:\U00ST\$(MSBuildProjectName)\</BaseOutputPath>

然后把每个带生成配置条件(Condition)的PropertyGroup里的OutputPath删除

回到第一个PropertyGroup增加一项

<OutputPath>$(BaseOutputPath)\bin\$(Configuration)_$(Platform)</OutputPath>

就能把所有生成配置的bin输出带到 Z:\U00ST\abc\bin_x64\ 了.


如果是WEB项目, 那么不能改变bin目录, 会让Web项目跑不起来, 尽管能编译通过

把bin做个目录链接. mklink /d bin z:\U00ST\Abc.Web\bin 就可以了

作成生成事件 

if not exist $(ProjectDir)bin mklink /d $(ProjectDir)bin z:\U00ST\$(ProjectName)\bin

会更方便


闲了再扯扯

其实就是在u盘上编译那点事, 这些年的u盘走虽然走了USB3.0不过提升的只有读取速度,

写入还是和以前差别不大, 于是把obj和bin扔到RAMDISK去, 编译速度大大提升!

就算在硬盘, 没有了源码管理需要排除的obj和bin目录在源代码里面也是很爽的!

标签: 软件开发 C# VisualStudio

评论(0) 引用(0) 浏览(1183)

Powered by emlog 去你妹的备案 sitemap