将 Nuget 与自定义构建配置结合使用
Use Nuget with custom build configurations
我有一个 Visual Studio 2019 项目,其中包含一些 nuget 包。该项目与构建配置发布和调试配合得很好。
现在我已经创建了自己的自定义构建配置。问题是现在项目不 link 一些 nuget-packages。
我也发现了原因。当我查看一些 nuget-packages 的 *.targets 文件时,我看到类似这样的内容:
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Link>
…
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Link>
…
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Link>
…
</Link>
我认为操作*.targets 文件不是很好的解决方案。所以我寻找一个解决方案,我的自定义构建配置继承库形式发布或调试。这可能吗?如果可能的话如何?
I think it’s no good solution to manipulate the *.targets file. So I
look for a solution, that my custom build configurations inherits the
Libraries form Release or Debug. Is this possible and if so how?
其实,只能在xxx.targets
文件中手动添加新自定义Configuration的判断条件,才能导入新配置下的lib库。并且没有这样的工具或方法可以让您的自定义构建配置从 Release 或 Debug 继承 Libraries。
和定义一个新的配置,它本身被赋予了一个新的值并且在proj
文件中,不可能继承Debug
或Release
除非被覆盖,否则为新值。
因此,在XML中,单个值不能在不改变其值的情况下继承某个值的特性。
作者在自己创建包的时候,就已经确定了默认的Debug或者Release模式并进行操作,并不是你新建的自定义配置。
所以要手动修改xxx.targets文件
解决方案
1) 手动将新的配置条件添加到 xxx.targets
文件中。
如果你想让它和Debug一样,你可以试试这个:
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32' or $(Configuration)|$(Platform)'=='xxx(New Configuration)|Win32 ">
<Link>
…
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32' or $(Configuration)|$(Platform)'=='xxx(New Configuration)|x64 ">
<Link>
…
</Link>
</ItemDefinitionGroup>
我认为这很容易,完成后,您应该在新的自定义配置下构建项目以将这些库路径包含在其中。
我有一个 Visual Studio 2019 项目,其中包含一些 nuget 包。该项目与构建配置发布和调试配合得很好。 现在我已经创建了自己的自定义构建配置。问题是现在项目不 link 一些 nuget-packages。 我也发现了原因。当我查看一些 nuget-packages 的 *.targets 文件时,我看到类似这样的内容:
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Link>
…
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Link>
…
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Link>
…
</Link>
我认为操作*.targets 文件不是很好的解决方案。所以我寻找一个解决方案,我的自定义构建配置继承库形式发布或调试。这可能吗?如果可能的话如何?
I think it’s no good solution to manipulate the *.targets file. So I look for a solution, that my custom build configurations inherits the Libraries form Release or Debug. Is this possible and if so how?
其实,只能在xxx.targets
文件中手动添加新自定义Configuration的判断条件,才能导入新配置下的lib库。并且没有这样的工具或方法可以让您的自定义构建配置从 Release 或 Debug 继承 Libraries。
和定义一个新的配置,它本身被赋予了一个新的值并且在proj
文件中,不可能继承Debug
或Release
除非被覆盖,否则为新值。
因此,在XML中,单个值不能在不改变其值的情况下继承某个值的特性。
作者在自己创建包的时候,就已经确定了默认的Debug或者Release模式并进行操作,并不是你新建的自定义配置。
所以要手动修改xxx.targets文件
解决方案
1) 手动将新的配置条件添加到 xxx.targets
文件中。
如果你想让它和Debug一样,你可以试试这个:
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32' or $(Configuration)|$(Platform)'=='xxx(New Configuration)|Win32 ">
<Link>
…
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32' or $(Configuration)|$(Platform)'=='xxx(New Configuration)|x64 ">
<Link>
…
</Link>
</ItemDefinitionGroup>
我认为这很容易,完成后,您应该在新的自定义配置下构建项目以将这些库路径包含在其中。