天道酬勤,学无止境

msbuild

VS2019 - 使用 C# 时 MSBuild SdkResolver 无法运行(VS2019 - MSBuild SdkResolver fails to run when using C#)

问题 我正在尝试开始使用 c#(我一直在使用 VS for C++ 没有问题),每当我尝试打开 C# 项目时,我都会收到此错误: The project file cannot be opened. The SDK resolver "Microsoft.DotNet.MSBuildSdkResolver" failed to run. Illegal characters in path. .csprj 只有 7 行! <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> </PropertyGroup> </Project> 我尝试将" '但得到了同样的错误。 使用/ResetSkipPkgs运行 VS2019 可以防止发生此问题并且项目加载正常。 但是我找不到问题的根源。 有其他人知道可能导致这种情况的原因吗? 我希望能够在不每次都通过命令行运行 VS 的情况下处理 C# 项目! 回答1 有其他人知道可能导致这种情况的原因吗? 我希望能够在不每次都通过命令行运行 VS 的情况下处理 C# 项目! 不确定您之前对 VS 做了什么。 可能这个问题是由某些第三方集成工具、vs 扩展或某些 VS 设置引起的。 建议 请尝试以下步骤: 1

2022-01-16 18:52:06    分类:技术分享    c#   visual-studio   msbuild   visual-studio-2019

Codesign returns unknown error after "replacing existing signature"

I am trying to build a Xamarin iOS app using xbuild on Jenkins. Sometimes the build fails during the codesigning process with an unknown error -1=ffffffffffffffff and sometimes the build succeeds. The provisioning profile is stored in a separate keychain jenkins.keychain (not the system or login keychain) that is referenced by Jenkins through the Keychains and Provisioning Profiles Plugin. This is the console log of Jenkins: Target _CodesignAppBundle: Codesign Task CodesignAllocate: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate

2022-01-16 18:34:56    分类:问答    ios   xamarin   msbuild   codesign   xbuild

使用 MSBuild 构建解决方案文件夹(Build a solution folder with MSBuild)

问题 我们有一个解决方案文件,其中包含一些解决方案文件夹:库、单元测试、应用程序等。 使用 Visual Studio 2010,我们可以通过右键单击它并使用“build”或“rebuild”来仅构建给定文件夹的项目。 这在开发人员的工作站上是完美的,我们希望在使用MSBuild的持续集成服务器上做同样的事情。 那么,我们可以使用 MSBuild 构建解决方案文件夹吗? 还是我们必须为每个文件夹创建一个专用的解决方案? 以下回复的结论是没有任何内置方法可以做到这一点,但有一些解决方法: 仅使用选定的项目创建专用解决方案, 使用将构建选定项目的专用 csproj , 添加一个新项目,该项目将引用现有解决方案文件中的选定项目。 我选择使用专用的解决方案文件,因为它的侵入性和技巧性更小,虽然不是更灵活(专用的 .csproj 解决方案应该提供完全控制)。 回答1 是的,您可以使用 MSBuild 构建解决方案文件夹。 msbuild "framework.sln" /t:First\Project:Build 将在名为First的文件夹中构建项目。 但是,磁盘文件夹和解决方案文件夹必须匹配(我为我的解决方案尝试了它们不首先匹配的)。 因此,您所要做的就是选择一个项目,该项目将该文件夹中的所有其他项目作为依赖项。 另请参阅: MSBuild 命令行参考 回答2 简短的回答是: 是的

2022-01-16 18:05:29    分类:技术分享    visual-studio   visual-studio-2010   msbuild   continuous-integration   solution

Visual Studio 解决方案——有什么方法可以创建一个“特殊”文件夹?(Visual Studio Solution -- Any way to create a "special" folder?)

问题 基本上,我希望我的一个文件夹作为一种“特殊文件夹”出现在其他文件夹上方,类似于 Properties 有它自己的特殊位置,即使它是一个文件夹,与 App_Data 等相同。 这可能吗? 回答1 默认情况下,Visual Studio 不支持添加特殊项目文件夹。 Properties 文件夹是硬编码的,可以按照它的方式运行。 但是,使用代码一切皆有可能。 您可以构建一个扩展来执行此操作,但这并不简单。 您可能需要弄乱IVsHierarchy甚至实现项目子类型。 回答2 基本上,我希望我的一个文件夹作为一种“特殊文件夹”出现在其他文件夹上方,类似于 Properties 有它自己的特殊位置,即使它是一个文件夹,与 App_Data 等相同。 这可能吗? 是的: 通过 IDE 手动执行编写您自己的脚本来生成/修改您的*.sln / *.vcproj 对于 IDE 中Solution Explorer (1)“手册”: Solution Explorer , right-click Solution node ==> Add ==> New Solution Folder 。 虽然通常文件夹按字母顺序排序(我会插入一个前导下划线以将您的特殊文件夹强制到顶部),但在我的 MSVS2008 上手动插入的解决方案文件夹将新文件夹留在“顶部”,即使它应该在按字母顺序排列。 但是,

2022-01-16 17:43:01    分类:技术分享    visual-studio-2010   msbuild   project   special-folders   solution-explorer

Biztalk 2009 和 2010 .btproj 项目中的增量构建支持?(Incremental build support in Biztalk 2009 and 2010 .btproj projects?)

问题 在追求增量构建时间改进的同时,我发现 .btproj 文件以及依赖于这些文件的所有其他项目在每次增量构建时都(部分地)重新构建。 一直跟踪到 BizTalkCommon.targets,我发现它对程序集进行了 2 遍编译——但只有第一遍尊重已构建的工件,因此破坏了依赖链的增量部分。 违规目标可以在 BizTalkCommon.targets(第 228 行)中看到: <!-- Delete the assembly and rerun the build process --> <Target Name="SecondPass" Condition="$(SecondBuild)!=true and $(TempAssemblyOnly)!=true"> <Delete Files="@(IntermediateAssembly)" /> <MSBuild Projects="$(MSBuildProjectFile)" Properties="SecondBuild=true"/> </Target> 我意识到 2 遍构建是有原因的,但简直不敢相信不可能为目标指定适当的输入和输出以正确处理增量构建。 有谁知道 .targets 文件是否有补丁,或者是否有另一个很好的理由不支持增量构建? 回答1 您可以通过几个非常简单的更改启用 MSBuild BizTalk 项目的增量编译

2022-01-16 16:17:57    分类:技术分享    msbuild   biztalk   biztalk-2009

为 MSBuild Exec 任务自定义系统环境变量路径(Customize system environment variable Path for MSBuild Exec Task)

问题 我正在尝试使用 Exec 任务调用在 MSBuild 过程中获取的批处理脚本。 但是,脚本的位置不是路径系统环境变量的一部分。 所以我想我可以更新目标中的 Path 属性,然后触发 Exec 任务: <Target Name="RestoreNPMPackages"> <Message Text="$([System.DateTime]::Now.ToString("yyyy-MM-dd hh.mm.ss.fff")) Entering Build.xml Target RestoreNPMPackages..." Importance="high" /> <PropertyGroup> <Path>$(Path);$(WorkspaceRoot)\Tools\$(Node_jsPackage)</Path> </PropertyGroup> <Message Text="Property Path in RestoreNPMPackages=$(Path)" Importance="high" /> <Exec Command="$(Path)\npm install --no-color --no-optional" /> <Message Text="$([System.DateTime]::Now.ToString("yyyy-MM-dd hh.mm.ss.fff")

2022-01-16 15:19:21    分类:技术分享    msbuild

如何从 jenkins 构建 Visual Studio 安装程序项目 (.vdproj) 以生成 .exe 和 .msi 文件?(How to build visual studio installer project (.vdproj) from jenkins to generate .exe and .msi files?)

问题 我有一个 Visual Studio 安装程序项目 (.vdproj),我想从 jenkins 构建它。 有人可以为我提供解决方案吗? 我尝试了对我没有锻炼的 msbuild。 然后我在批处理文件中尝试了以下内容。 devenv.exe pathToProject\projectName.vdproj /build "Release|Any CPU" 这没有用。 然后我尝试了这个 devenv.com pathToProject\projectName.vdproj /build "Release|Any CPU" 在这种情况下,项目已构建,但 .exe 和 .msi 文件未在 Release(或 Debug)文件夹中创建。 回答1 如何从 jenkins 构建 Visual Studio 安装程序项目 (.vdproj) 以生成 .exe 和 .msi 文件? 请尝试以下构建命令行: devenv.com pathToProject\projectName.vdproj /build "Release" 正如我们所知,我们无法为 Installer 项目指定平台,因为: 体系结构是在设置项目的属性窗口中指定的,令人困惑的是,它与您在此处显示的属性页面不同。 如果您在解决方案资源管理器中选择安装项目并单击 F4,您将看到带有 AddRemoveProgramsIcon

2022-01-16 14:44:17    分类:技术分享    c#   visual-studio   jenkins   msbuild   continuous-integration

如何在 MSBuild 中创建新属性并在 WIX 中引用它(How to create a new property in MSBuild and reference it in WIX)

问题 我们需要创建一个属性来指示我们的软件版本。 然后我们想在我们的 WIX 项目中使用它,即在 wxs 文件中引用它。 我们不想在 wxs 文件中定义它,因为我们希望 MSBuild 也根据此版本号重命名输出文件。 PropertyGroup 中的常量定义不适合我们,原因如下: PropertyGroup 中定义的属性是特定于配置/平台的。 每当我们在 Visual Studio IDE 中从项目属性窗口修改此预处理器时,通常我们只修改特定配置/平台组合的值。 (我知道可以在 IDE 中为 All Config/Platform 修改它,但实际上是通过复制所有组合来完成的。而且我们仍然有可能通过只修改一个组合的值来破坏同步。例如,默认情况下,当我们打开项目属性窗口的构建选项卡时,它将显示活动的配置/平台)。 另一方面,即使我们可以在没有任何条件的情况下定义一个 PropertyGroup,但每当我们在 IDE 中对其进行修改时,我们通常只是针对特定组合进行修改,而不是全部修改。 由于我们纯粹是在 VS IDE 中构建我们的软件,因此很难维护并且容易出现问题。 我尝试在 BeforeBuild 目标中使用 MSBuild 的 CreateProperty 任务,但在接下来的执行中,该值似乎根本无效。 例如,如果我覆盖 BeforeBuild 中的现有属性,并且当我在 WIX

2022-01-16 13:46:32    分类:技术分享    msbuild   wix   msbuild-propertygroup

如何在自定义任务中访问当前项目上下文?(How do I access current Project context within a custom Task?)

问题 如何在 MSBuild 的自定义任务中访问当前项目上下文? 起初它看起来好像 ProjectCollection 上的 GlobalProjectCollection 引用允许访问,但这似乎是空的,至少在从命令行运行 MSBuild 时是这样。 我目前可以通过以下方式从当前项目文件中获取新的项目实例: List projectAssemblies = new List(); using (XmlReader projectFileReader = XmlReader.Create(this.BuildEngine.ProjectFileOfTaskNode)) { Project project = new Project(projectFileReader); foreach (ProjectItem item in project.AllEvaluatedItems) { ... woo hoo ... } } 但这似乎很麻烦。 如何才能访问调用我的任务的项目? 回答1 你不能。 MSBuild 是专门设计的,因此单个任务只能访问您明确传递给任务的参数,而不能访问其他任何参数。 这使得 MSBuild 文件更易于阅读,因为您知道每个任务仅受调用此任务时指定的内容的影响。 您拥有的代码不是创建项目的副本,而是创建一个新实例,因此您不应期望属性相同。 例如

2022-01-16 13:34:58    分类:技术分享    c#   .net   msbuild

Generate setup.exe for ClickOnce deployment from command line using MSBuild

I have a MSBuild script that builds my windows forms application, generates the application manifest and signs it, then generates the deployment manifest. The script also generates the publish.htm file for me. Now I need to generate the setup.exe file and so far I have not been able to figure out how VS generates it. How can I generate the setup.exe file using a MSBuild script? Thank you in advance for your help!

2022-01-16 13:25:47    分类:问答    msbuild   clickonce