我想开始使用Microsoft.Net.Compilers
来简化我们的构建服务器的工作。但是,我只能通过将包添加到所有项目中来使其在per-project level工作
这是有问题的,因为必须将包添加到每个新创建的项目中。这可能导致代码在开发人员的机器上编译(具有最新的编译器),但在构建服务器上会失败。我们有很多项目(超过100个),所以这是比较常见的。
有没有办法在解决方案级别使用Microsoft.Net.Compilers
?
如果没有支持的方式,是否有一个命令行工具我不必在构建服务器上安装?或者,这不是这些工具的预期用途吗?
答案 0 :(得分:16)
如果在VS 2017(更新1,内部版本号> = 15.1。*)中,您可以使用MSBuild集成PackageReference
机制而不是packages.config
机制,以前只能用于.net核心和。{1}}。净标准项目类型。请参阅PackageReference documentation以及宣布支持的NuGet blog post,尤其是“不是.NET Core的其他项目类型怎么样?”。
我们的想法是从安装软件包并将其添加到packages.config以进行恢复,只需在csproj文件中指定MSBuild项目即可。这可以在VS中为新项目设置: (动画来自上面链接的NuGet博客文章)
MSBuild 15的一个新功能是它支持自动包含目录层次结构中具有特殊名称的文件。这些是Directory.Build.props
和Directory.Build.targets
,它们将包含在您的项目文件内容之前(道具)和之后(目标)(多个定位项目的.targets
版本存在错误,修复即将发布。)
如果您在解决方案级别创建包含以下内容的Directory.Build.props
文件,其下面的目录层次结构中的所有项目将继承其内容,您可以强制将NuGet依赖于每个项目:
<Project>
<ItemGroup>
<PackageReference Include="Microsoft.Net.Compilers" Version="2.1.0"/>
</ItemGroup>
</Project>
答案 1 :(得分:1)
右键单击您的解决方案&gt;管理NuGet包以获得解决方案......
......或者:
工具&gt;库包管理器&gt;管理NuGet包以获得解决方案......
然后通过浏览您的包,然后选中顶部复选框,然后点击安装将其添加到所有项目中。
来源:https://stackoverflow.com/a/8653312/7007466
为您需要的每种类型的项目创建一个模仿原始模板的模板(控制台,库等...)并将包添加到其中。
注意: 在命名将作为模板源的项目时,仅使用有效的标识符字符。从名为无效字符的项目导出的模板可能会导致基于模板的未来项目中的编译错误。
如果安装了Visual Studio SDK,则可以使用VSIX项目模板将完成的模板包装在.vsix文件中以进行部署。
来源:https://msdn.microsoft.com/en-us/library/xkh1wxd8.aspx
如果有人比创建模板更简单,我很乐意接受它。