我有一个构建项目的脚本,输出.NET 4.0程序集 .
该项目包括NuGet的NLog . 所以项目文件中的引用如下所示:
<Reference Include="NLog">
<HintPath>..\packages\NLog.2.0.1.2\lib\NLog\net40\NLog.dll</HintPath>
</Reference>
我的packages.config看起来像这样:
<packages>
<package id="NLog" version="2.0.1.2" targetFramework="net40" />
</packages>
这个项目将在NuGet上发布,现在我想更新构建脚本,因此它也构建了.NET 4.5程序集 .
现在,我知道我可以将 /p:TargetFrameworkVersion="4.5"
传递给 msbuild
并让它以.NET 4.5为目标 - 但这仍然需要构建.NET 4.0 NLog程序集 .
如何使用正确版本的NuGet依赖项为目标框架构建它?
1 回答
刚才有完全相同的要求,没有发现'纯'的NuGet解决方案 . 我怀疑是否存在 . 唯一的选择似乎是维护不同的项目文件(或部分文件) - 对于大量代码库来说绝对不行 .
我所做的只是在所有项目中只有目标4.5,并且有一个相当简单的msbuild脚本,它创建项目的副本和所有他们的NuGet配置,用于定位其他版本的.Net . 基本上它只是枚举所有.csproj文件,从
net45
- >net40
字符串中查找/替换并以不同的名称保存它们 . 同意包配置/目标/解决方案文件 .这几乎是完整的MSBuild目标:
运行之后,每个项目都有一个.Net40.csproj,一个.Net40.sln,一个Nuget.Net40.targets用于解决方案和packages.Net40.config文件,所有这些都可以构建 . 到现在为止还挺好 .
虽然小问题:
packages.config
在Nuget.exe中被硬编码为一个字符串,因此它不会接受packages.net40.config
的部分's '算法'来判断传递给-install
算法的路径是否是实际的包配置,或者包ID . 大声笑 . 我raised a question on this但没有答案 . 无论如何,我不打算让它破坏乐趣,所以我在源代码中进行了单行调整,让它接受任何以.config
结尾的内容,构建它并立即使用Nuget.exe .