【问题标题】:Visual Studio pré build event delete referenceVisual Studio 预构建事件删除参考
【发布时间】:2018-07-20 05:43:00
【问题描述】:

我将免去您解释我为什么要这样做的麻烦,但我正在寻找一种在构建项目时删除对 dll 的引用的方法。我不是在谈论未使用的引用,而是可能包含我的项目正在使用的相同命名空间和相同类的引用。我在想一个预构建事件命令行,但我不知道该命令会是什么样子。

PS:对于那些关心我为什么想要这个的人。我有一个模板项目 A,其中包含使用在另一个项目 B 中定义的基类的类。这个模板项目 (A) 它的唯一功能是打包在 Nuget 包中,然后部署在多个其他项目中,为简单起见想象3个项目C、D和E。在项目C、D和E中使用Nuget会生成所有的类并引用项目B的dll,因为我们需要Base类。目前我还获得了对模板项目 (A) 的 DLL 的引用。这是不应该发生的,因为具有相同命名空间的所有类都将存在于项目 A 和项目 C、D 和 E 中。这就是为什么我要自动删除对模板项目 (A) 的引用。

提前致谢。

亲切的问候,

亚尼克

【问题讨论】:

  • 如果包 A 根本不使用,为什么还需要引用它?有多种方法可以“解决”您的问题,但我强烈反对将程序集排除在编译之外。这里的好方法是在 A 中使用不同的命名空间,特别是如果您同时控制两者。第二种方法是为引用的项目/包添加一个全局别名。示例:path\to\MyLibrary.dllCoolLibrary
  • @Yan,这个问题现在怎么样?你解决了吗?如果没有,请告诉我此问题的最新状态。
  • @imps,就像我说的那样,我不需要对项目 A 的引用。问题是我总是得到引用,因为我总是使用 includereferencedprojects 参数。

标签: visual-studio events command-line build nuget


【解决方案1】:

Visual Studio 预构建事件删除参考

您要在构建项目时删除构建事件命令行中的引用project A 吗?如果是的话,恐怕没有直接的build event命令行可以做到这一点,你可以创建一个power shell脚本删除引用,然后在build event中执行这个power shell脚本。

然而,正如 imp 所说的“如果它根本不会被使用,为什么你需要对包 A 的引用?”。因此,作为一种解决方法,您不能将引用 project A 添加到项目 C、D 和 E,为此,您可以将 dll 文件定位到工具文件夹而不是 .nupsec 文件中的 lib 文件夹:

  <files>
    <file src="bin\Debug\ProjectA.dll" target="Tools\ProjectA.dll" />
  </files>

Project A.nuspec 应该是:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>MyModels</id>
    <version>1.0.0</version>
    <authors>Tester</authors>
    <owners>Tester</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Package description</description>
    <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
    <copyright>Copyright 2018</copyright>
    <tags>Tag1 Tag2</tags>
  </metadata>
  <files>
    <file src="bin\Debug\ProjectB.dll" target="lib\Net45\ProjectB.dll" />
    <file src="bin\Debug\ProjectA.dll" target="Tools\ProjectA.dll" />
  </files>
</package>

然后打包这个.nuspec文件,生成nuget包,将这个包安装到项目中,引用的Project A不会添加到项目中。

希望这会有所帮助。

【讨论】:

  • 我总是使用 includereferencedprojects 参数创建我的 nuget 包。不这样做并指定应该使用哪些依赖项和文件解决了它。我这样做的方式与您针对 lib\net45 文件夹的方式相同。我会将您的帖子标记为答案,但您能否解释一下目标工具文件夹的确切作用?
猜你喜欢
  • 1970-01-01
  • 2010-12-01
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 2012-10-28
  • 2010-10-24
  • 1970-01-01
相关资源
最近更新 更多