问题标签 [msbuild]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - “复制本地”和项目参考的最佳实践是什么?
我有一个大型 c# 解决方案文件(约 100 个项目),并且我正在尝试缩短构建时间。我认为“复制本地”在很多情况下对我们来说是浪费,但我想知道最佳实践。
在我们的 .sln 中,我们有依赖于程序集 B 的应用程序 A,它依赖于程序集 C。在我们的例子中,有几十个“B”和少数“C”。由于这些都包含在 .sln 中,因此我们使用的是项目引用。当前所有程序集都构建到 $(SolutionDir)/Debug(或 Release)中。
默认情况下,Visual Studio 将这些项目引用标记为“复制本地”,这会导致每个“C”被复制到 $(SolutionDir)/Debug 中,对于每个构建的“B”。这似乎很浪费。如果我只关闭“复制本地”会出现什么问题?其他拥有大型系统的人会做什么?
跟进:
许多响应建议将构建分解为较小的 .sln 文件...在上面的示例中,我将首先构建基础类“C”,然后是大部分模块“B”,然后是一些应用程序,“一种”。在这个模型中,我需要从 B 获得对 C 的非项目引用。我遇到的问题是“调试”或“发布”被纳入提示路径,我最终构建了“B”的发布版本针对“C”的调试版本。
对于那些将构建拆分为多个 .sln 文件的人,您如何处理这个问题?
.net - 使用来自同一解决方案的自定义 MSBuild 任务?
我是 MSBuild 的新手,想尝试一下,但我就是不明白为什么这不起作用。
所以我的解决方案有两个项目:“模型”和“BuildTasks”。BuildTasks 只有一个类:
然后在 Model.csproj 我添加了这个:
我已经设置了构建顺序,因此“BuildTasks”在“模型”之前构建。但是当我尝试构建模型时,我得到了这个错误:
无法从程序集 C:\WIP\TestSolution\src\BuildTasks\bin\BuildTasks.dll 加载“BuildTasks.Test”任务。无法加载文件或程序集 'file:///C:\WIP\TestSolution\src\BuildTasks\bin\BuildTasks.dll' 或其依赖项之一。该系统找不到指定的文件。确认 <UsingTask> 声明正确,并且程序集及其所有依赖项都可用。
这个文件肯定存在,为什么MSBuild找不到呢?
我什至尝试用硬编码“C:\WIP\TestSolution”代替“$(SolutionDir)”并得到同样的错误。但是,如果我将该 .dll 复制到我的桌面并将路径硬编码到我的桌面,它确实可以工作,我不知道为什么。
编辑:我没有路径错误。我修改了 BuildTasks 的 Debug/Release 构建以将 .dll 输出到 bin 文件夹,因为我不希望 Debug/Release 具有不同的路径。
.net - 使用 MSBuild 发布 Web 服务
如何使用 MSBuild 将 Web 服务发布到服务器?
visual-studio - MSBuild - 它可以解决解决方案文件中的项目依赖关系吗?如果有怎么办?
我有一个 msbuild 项目,它从 Visual Studio 构建一个 SLN 文件,其中包含所有项目(大约 70 多个项目),并且许多项目相互依赖,这意味着它们需要按顺序构建 - 有时开发人员会忘记在解决方案文件中的 Visual Studio 中手动设置构建顺序,导致干净解决方案上的 msbuild 失败,因为某些东西构建无序/找不到 dll。
msbuild 有没有办法获取所有项目并解决依赖关系并按顺序构建项目,如果有我该怎么做?使用 MSBuild 任务?对于当前的尝试,它似乎只是按照它读取项目的顺序构建 - 如果我传入项目文件+路径的列表。
目前我能想到解决这个问题的唯一方法是一个外部应用程序,它扫描项目文件和引用,然后每次手动创建一个解决方案..但这对于这么简单的事情来说似乎有点矫枉过正。
有人解决过/见过这个吗?
msbuild - msbuild:什么时候在构建项目中是 Microsoft.VisualBasic.Targets 由 msbuild“导入”的?
这是我的情况:我试图通过查看位于 .NET 框架安装路径中的构建文件来了解 msbuild 的工作原理:
我假设 msbuild 以 Microsoft.Common.Targets 开头,然后在将来的某个时候 msbuild“查看”我的 vb 项目文件扩展名 (.vbproj) 并加载“Microsoft.VisualBasic.targets”。
两个问题:
1)我的解释正确吗?
2) 你能向我解释一下,确定这是一个 .vbproj 文件并相应地加载“Microsoft.VisualBasic.targets”的代码在哪里?代码是锁定在某个程序集中的某个地方,还是在上面列出的构建文件中可见?
c# - MSBuild 条件编译
我有一个 web 服务类,框架的其余部分依赖它来获取它的数据,但是 web 服务类需要有不同的方法属性,具体取决于它所处的环境。例如......
看到那个“ https://example ”了吗?这需要根据环境而改变。AFAIK,您不能使该字符串在运行时动态,它必须以这种方式编译。所以我试图得到它,以便我有多个用于此 Web 服务的 CS 文件,这些文件中硬编码了不同的属性 URL,MSBuild 在预编译时交换它们。所以我有一个用于测试的基础“Service.cs”,用于生产环境的“Service.cs.production”等等。
- 这是做到这一点的最佳方法,还是我错过了可以让一个 CS 自行处理环境的东西?
- 为了保持具有相同的类名和 IntelliSense 不认为事情是模棱两可的,我搞砸了文件扩展名(“Service.cs”与“Service.cs.production”)。这是唯一的方法吗?
- 考虑到以上所有内容都可以,并且我正在针对“生产”配置进行编译,它可以编译 Service.cs.production而不是Service.cs 并且一切都变得很糟糕吗?
谢谢!
c# - 在自定义构建任务中运行 Project.Build() 时如何获取构建输出、错误列表?
环境:
C# 项目、Visual Studio 2008、C#、.Net 3.5、MSBuild
客观的:
为我的 C# 项目运行我自己的自定义构建任务,并基于平台(Soln 配置平台),在构建之前对 Project 对象本身进行一些操作。比如将 BuildAction 设置为 EmbeddedResource 等。
完成后,我打电话给Project.Build()
. 我不想在 GlobalEngine 上使用 Project 对象,因为无论如何修改 Project 对象后,它都会将文件标记为脏文件(并从 TFS 签出)。
问题:
因为我使用的是我自己的引擎实例和项目,所以我无法将构建输出、错误定向到 VS。我只得到一个布尔值Project.Build()
。我没有发现任何我可以连接的事件可以允许访问BuildErrorEventArgs
和类似的东西。我知道我可以用来Log.LogErrorEvent()
将消息记录到 VS 错误列表中。但我需要先获得构建输出本身才能做到这一点。
代码:
visual-studio - 团队建设现在非常缓慢
我们在实施 Team Foundation Build Server 时遇到了性能问题,我对如何加快速度没有任何想法。我们已经添加了一些 PropertyGroup 元素来提高几个步骤的性能(SkipClean、SkipLabel、SkipInitializeWorkspace),但我认为我们需要进行重大重组来解决问题。这是我们的设置:
- 我们有大约 40 个 Web 应用程序,每个应用程序都非常不同,但运行的是一堆共享程序集
- 这些 Web 应用程序中的每一个都有自己的解决方案;
- 这些 Web 应用程序中的每一个都引用了大约 10 到 25 个共享程序集;
- 存在一个构建定义,其中包含在每次签入主干时触发的所有解决方案;
这是我们遇到的基本问题
- 在构建期间,它将构建每个共享程序集的引用次数,而不是构建一次并为每个应用程序使用
- 放置目录的文件复制时间非常慢。它必须通过网络共享并且不会采用本地路径。
- 每隔这么多构建,一个或多个输出文件就会“锁定”并导致构建中断,即使编译正常。
- 还有一件事——我也尝试过单独的构建定义,但这样做也会强制在获取最新版本上获取另一个工作区。我更希望构建服务器包含一个版本的主干来构建。
在过去的几个月里,我们已经屈服于嗜睡并忽略了这个问题,但现在构建时间是一个多小时到一个半小时。
我正在玩弄学习和切换到巡航控制的想法,以获得更好的控制。有人不同意吗?
非常感谢任何帮助。谢谢!
maven-2 - 什么工具相当于 TFS(或 MS-land)中的 Maven?
我的公司正在从 svn(和开源产品)转向 TFS(和 MS 产品)。我们过去使用 maven 将预构建的组件打包成可发布的包。TFS 或 MS-Land 中是否有像 maven 一样强大的工具来执行此操作?
我看过 msbuild,但它似乎不如 Maven 强大。
msbuild - 使用 MSbuild 自动预编译网站的问题
全部,
我目前的解决方案包括 2 个类库和一个使用 Msbuild 在 teamCity 内构建的网站。现在我想预编译网站并将其作为工件提供。但是,当我尝试使用预编译它时
我得到一个错误,因为它正在寻找一个虚拟路径(我没有想要做的所有它预编译我对发布站点不感兴趣的文件)如果我在其中放置一个虚拟路径我得到另一个错误(正确)关于它不是 IIS 下的应用程序
有任何想法吗