Visual studio Visual Studio pré生成事件删除引用

Visual studio Visual Studio pré生成事件删除引用,visual-studio,events,command-line,build,nuget,Visual Studio,Events,Command Line,Build,Nuget,我不想麻烦您解释我为什么要这样做,但我正在寻找一种方法,在构建项目时删除对dll的引用。我说的不是一个未使用的引用,而是一个可能包含与我的项目使用的相同名称空间和相同类的引用。我正在考虑一个prébuild事件命令行,但我不知道该命令会是什么样子 PS:对于那些关心我为什么想要这个的人。我有一个模板项目a,其中包含使用另一个项目B中定义的基类的类。此模板项目a的唯一功能是打包在一个Nuget包中,然后部署到多个其他项目中,为简单起见,请想象3个项目C、D和E。在项目C中使用Nuget,D&E将生

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

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

提前谢谢

亲切问候,

扬尼克

Visual Studio pré生成事件删除引用

是否要在生成项目时删除生成事件命令行中的引用项目A?如果是,恐怕没有直接生成事件命令行来执行此操作,您可以创建一个powershell脚本来删除引用,然后在生成事件中执行此powershell脚本


但是,正如imp所说,如果根本不使用包a,为什么需要对它的引用呢?。因此,作为一种解决方法,您不能将引用项目a添加到项目C、D和E中,为此,您可以将dll文件定向到tools文件夹,而不是.nupsec文件中的lib文件夹:

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


希望这能有所帮助。

如果软件包a根本不被使用,为什么需要它的引用?有多种方法可以解决您的问题,但我强烈反对将程序集排除在编译之外。这里最好的方法是在一个数据库中使用不同的名称空间,特别是如果您同时控制这两个名称空间的话。第二种方法是为引用的项目/包添加全局别名。示例:path\to\MyLibrary.dll CoolLibrary@Yan,现在这个问题如何?你解决了吗?如果没有,请告诉我这个问题的最新状态。@imps,我不需要项目A的引用,就像我说的那样。问题是我总是得到引用,因为我总是使用includereferencedprojects参数。我总是使用includereferencedprojects参数创建nuget包。不这样做&指定应该使用哪些依赖项和文件解决了这个问题。我这样做的方式与您定位lib\net45文件夹的方式相同。我会将你的帖子标记为答案,但你能解释一下目标工具文件夹的确切功能吗?
  <files>
    <file src="bin\Debug\ProjectA.dll" target="Tools\ProjectA.dll" />
  </files>
<?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>