如何在解决方案级别使用Microsoft.Net.Compilers?

我想开始使用Microsoft.Net.Compilers来简化我们的构建服务器的工作。 但是,我只能通过将包添加到所有项目中来使其在每个项目级别上工作。
这是有问题的,因为必须将包添加到每个新创建的项目中。 这可能导致代码在开发人员的机器上编译(具有最新的编译器),但在构建服务器上会失败。 我们有很多项目(超过100个),所以这是比较常见的。

有没有办法在解决方案级别使用Microsoft.Net.Compilers

如果没有支持的方式,是否有一个命令行工具,我不必在构建服务器上安装? 或者,这不是这些工具的预期用途吗?

如果在VS 2017(更新1,构建数> = 15.1。*)中,您可以使用MSBuild集成的PackageReference机制而不是之前仅适用于.net核心和.net标准项目类型的packages.config 。 请参阅PackageReference文档以及宣布支持的NuGet博客文章 ,尤其是“不是.NET Core的其他项目类型怎么样?”部分。

我们的想法是从安装软件包并将其添加到packages.config进行恢复,以便仅在csproj文件中指定MSBuild项目。 这可以在VS中为新项目设置: 从packages.config切换到ProjectReference (动画来自上面链接的NuGet博客文章)

MSBuild 15的一个新function是它支持自动包含目录层次结构中具有特殊名称的文件。 这些是Directory.Build.propsDirectory.Build.targets ,它们将被包含在(道具)之前和之后(目标)您的项目文件的内容(针对多目标项目的.targets版本存在错误,其修复方法是即将面世)。

如果在解决方案级别创建具有以下内容的Directory.Build.props文件,则其下面的目录层次结构中的所有项目将inheritance其内容,并且您可以强制NuGet依赖项到每个项目:

      

对于解决方案中的现有项目:

右键单击解决方案>管理解决方案的NuGet包…

… 要么:

工具>库包管理器>管理解决方案的NuGet包…

然后通过浏览您的包,然后选中顶部复选框,然后单击安装将其添加到所有项目。

来源: https : //stackoverflow.com/a/8653312/7007466


对于新项目:

为您需要的每种类型的项目(控制台,库等…)创建一个模仿原始模板的模板,并将包添加到其中。

  • 创建一个项目。

    注意:在命名将作为模板源的项目时,仅使用有效的标识符字符。 从以无效字符命名的项目导出的模板可能会导致基于模板的未来项目中的编译错误。

  • 编辑项目,直到可以将其导出为模板。
  • 根据需要,编辑代码文件以指示应在何处进行参数替换。
  • 在“文件”菜单上,单击“导出模板”。 “导出模板”向导将打开。
  • 单击项目模板。
  • 如果当前解决方案中有多个项目,请选择要导出到模板的项目。
  • 点击下一步。
  • 选择模板的图标和预览图像。 这些将显示在“新建项目”对话框中。
  • 输入模板名称和说明。
  • 单击完成。 您的项目将导出到.zip文件中并放置在指定的输出位置,如果选择,则导入到Visual Studio中。

如果安装了Visual Studio SDK,则可以使用VSIX项目模板将完成的模板包装在.vsix文件中以进行部署。

资料来源: https : //msdn.microsoft.com/en-us/library/xkh1wxd8.aspx

如果有人比创建模板更简单,我很乐意接受它。