【问题标题】:MSBuild .NET project that will output existing assembly as it's resultMSBuild .NET 项目将输出现有程序集作为结果
【发布时间】:2015-04-12 21:59:23
【问题描述】:

我需要创建 csproj 文件,该文件可用作 VS2013 中的项目参考,并将输出预构建的二进制文件作为“构建”结果。

我们使用参考项目进行构建,但公司政策不允许所有人访问其中的某些项目。因此,需要手动更新项目才能构建它们。在切换分支和编辑项目文件时,这确实是一个很大的不便,所以我想创建一个虚拟项目,该项目将绑定到预构建的二进制文件作为它们的“输出”,并将被放置而不是真正的项目。

编辑:暂时不能将该程序集移至 Nuget 包,因为 Nuget 在开发流程方面存在一些问题(当您需要调试/测试/开发包时)。我看到了一些实现 Nuget 包和本地项目之间切换的 VS 扩展,这可能会解决这个问题,但我不确定它是否会被接受并想探索其他选项。

说清楚 - 我要避免以任何方式编辑项目,以便在从 Git 中提取项目后可以干净地构建项目,并且我不必每次在提交前都清理它。

【问题讨论】:

  • 你试过使用 git 子模块吗?或者也许我错过了什么。
  • 如何将预构建脚本添加到您的项目中,以复制所引用程序集的最新版本?创建一个虚拟项目听起来没有必要。
  • Git 子模块不是一个选项 - 我们 无权访问该 repo,这就是问题所在。从预构建脚本开始 - 它不会将项目的引用(在这些项目中引用)切换到构建的程序集(我们需要使用)。
  • 有此类问题的程序员需要go here
  • 嗯,实际上项目依赖解析(结合安全策略)是我当前项目中最糟糕的问题,所以还不错。我们正在尝试实施一些适当的解决方法。

标签: c# .net visual-studio msbuild projects-and-solutions


【解决方案1】:

我没有正确测试它,但解决方案似乎很简单(如果我正确理解问题的话)。

只需将其添加到现有的 .csproj 中,覆盖 Build 目标即可提供预构建程序集的路径。

  <Target
      Name="Build"
      Returns="$(TargetPath)" />

这假定 TargetPath 属性已经定义,如果您要修改原始 .csproj,它应该自动定义。否则,只需在 Build 任务之前在 &lt;PropertyGroup&gt; 中自己定义即可。

请注意,定义 TargetPath 对于您自己项目中的 ProjectReferences 解析很重要。

【讨论】:

    【解决方案2】:

    让那些受限(仅限二进制)项目驻留在内部 Nuget 包源中,以便 Nuget 可以在构建时根据需要安装包?

    【讨论】:

    • 好吧,我提出来了。这不是一个选项,因为 nuget 在开发流程方面存在问题——我们只需要使用核心程序集,但其他开发人员需要调试和开发它。我看到了一些允许在 nuget 包和项目之间切换的扩展,我们将看看它是如何进行的。但现在我需要一些其他的解决方案。
    猜你喜欢
    • 2021-03-07
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多