VisualStudioVersion, MSBuildExtensionsPath32

Xamarin.iOS Unified API绑定项目(iOS Binding Project)报错解决方法 具体错误 Error: /Users/xx/Projects/SDKBindings/WeChatSDK.Unified/WeChatSDK.Unified.csproj: /Users/xx/Projects/SDKBindings/WeChatSDK.Unified/WeChatSDK.Unified.csproj could not import "$(MSBuildExtensionsP 阅读详情


MSBuildExtensionsPath32

The path of the MSBuild subfolder under the \Program Files or \Program Files (x86) folder. This path always points to the 32-bit \Program Files folder on a 32-bit machine and \Program Files (x86) on a 64-bit machine. See also MSBuildExtensionsPath and MSBuildExtensionsPath64.


MSBuildExtensionsPath

Introduced in the .NET Framework 4: there is no difference between the default values of MSBuildExtensionsPath and MSBuildExtensionsPath32. You can set the environment variable MSBUILDLEGACYEXTENSIONSPATH to a non-null value to enable the behavior of the default value of MSBuildExtensionsPath in earlier versions.

In the .NET Framework 3.5 and earlier, the default value of MSBuildExtensionsPath points to the path of the MSBuild subfolder under the \Program Files\ or \Program Files (x86) folder, depending on the bitness of the current process. For example, for a 32-bit process on a 64-bit machine, this property points to the \Program Files (x86) folder. For a 64-bit process on a 64-bit machine, this property points to the \Program Files folder.

This location is a useful place to put custom target files. For example, your target files could be installed at \Program Files\MSBuild\MyFiles\Northwind.targets and then imported in project files by using this XML code:

<Import Project="$(MSBuildExtensionsPath)\MyFiles\Northwind.targets"/>


How to create a Visual Studio extensibility project that is compatible with VS 2010, 2012 and 2013

For most common project types, you can just create a project in VS2010 and open it in 2012 and 2013 just fine. For some others (like VS package or VSIX projects), you may find Visual Studio wants to perform a one-way conversion:

image

 

The first check that was introduced with VS2012 was to require a new $(MinimumVisualStudioVersion) property that has to match the also newly introduced $(VisualStudioVersion). The one-way upgrade would end up introducing the following two properties at different places in the project file:



< VisualStudioVersion Condition = "'$(VisualStudioVersion)' == ''" >10.0</ VisualStudioVersion >< MinimumVisualStudioVersion >11.0</ MinimumVisualStudioVersion >

The next was to improve the way the location of the VSSDK is determined (to allow overriding it on build servers, I assume). Where previously you’d have a hardcoded reference to the VSSDK targets:



< Import Project = "$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\VSSDK\Microsoft.VsSDK.targets" Condition = "false" />

You’d now have:







< PropertyGroup >
     < VisualStudioVersion Condition = "'$(VisualStudioVersion)' == ''" >10.0</ VisualStudioVersion >
     < VSToolsPath Condition = "'$(VSToolsPath)' == ''" >$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</ VSToolsPath >
</ PropertyGroup >
< Import Project = "$(VSToolsPath)\VSSDK\Microsoft.VsSDK.targets" Condition = "'$(VSToolsPath)' != ''" />

This makes it possible to build the same extension for multiple Visual Studio targets.

While these changes seem like they would be backwards-compatible with VS2010, they are not. Specifically, the MinimumVisualStudioVersion = 11.0 is the problem there. Moreover, when we open the project in VS2013, it will be updated to 12.0 making it incompatible with VS2012 AND VS2010!

image

We can solve it by changing it as follows:






<!-- This is the property that causes VS 2012+ to insist on one-way update of the project -->
< PropertyGroup Condition = "'$(VisualStudioVersion)' &gt;= '11.0'" >
     < MinimumVisualStudioVersion >$(VisualStudioVersion)</ MinimumVisualStudioVersion >
</ PropertyGroup >

We assume that later versions of VS will keep checking the same way, so we use the >= 11.0 condition there, and essentially just make the two match. With this in place, we can now open the project in all three versions.

Another property that VS2013 adds too is:


1
< OldToolsVersion >4.0</ OldToolsVersion >

So to recap, we can just add these properties at the top of the project file:















< PropertyGroup >
     < VisualStudioVersion Condition = "'$(VisualStudioVersion)' == ''" >10.0</ VisualStudioVersion >
     < VSToolsPath Condition = "'$(VSToolsPath)' == ''" >$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</ VSToolsPath >
</ PropertyGroup >
 
<!-- This is the property that causes VS 2012+ to insist on one-way update of the project -->
< PropertyGroup Condition = "'$(VisualStudioVersion)' &gt;= '11.0'" >
     < MinimumVisualStudioVersion >$(VisualStudioVersion)</ MinimumVisualStudioVersion >
</ PropertyGroup >
<!-- This is an additional property added by VS 2013 -->
< PropertyGroup Condition = "'$(VisualStudioVersion)' &gt;= '12.0'" >
     < OldToolsVersion >4.0</ OldToolsVersion >
</ PropertyGroup >

And at the bottom, replace the SDK targets with:



< Import Project = "$(VSToolsPath)\VSSDK\Microsoft.VsSDK.targets" Condition = "'$(VSToolsPath)' != ''" />

 

Referencing SDK Assemblies

In addition to the project opening fine, you also need to be able to reference the SDK assemblies from your projects properly. This is tricky since the location of the SDK assemblies changed significantly between 2010 and 2012+. It used to be under C:\Program Files (x86)\Microsoft Visual Studio 2010 SDK SP1\ and now is under C:\Program Files (x86)\Microsoft Visual Studio 11.0\VSSDK\. Clearly, the new location is much more amenable to automation from MSBuild. The most reliable way I’ve found that looks concise is to just grab the value from the VSSDK[version]Install environment variable and use that to build the SDK path:











< PropertyGroup Condition = "'$(VSSDK)' == ''" >
     < VSSDKVar >VSSDK$(VisualStudioVersion.Replace('.', ''))Install</ VSSDKVar >\
     < VSSDK >$([System.Environment]::ExpandEnvironmentVariables('%$(VSSDKVar)%'))VisualStudioIntegration\Common\Assemblies\</ VSSDK >
</ PropertyGroup >
< PropertyGroup >
     < VSSDK20 >$(VSSDK)v2.0\</ VSSDK20 >
     < VSSDK40 >$(VSSDK)v4.0\</ VSSDK40 >
     < VSToolsPath Condition = "'$(VSToolsPath)' == ''" >$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</ VSToolsPath >
</ PropertyGroup >

Note that the [version] in the environment variable does not contain the VS version dot (i.e. 11.0 is 110), so we remove that to build the variable name. We then expand it to get the $(VSSDK). And then I build the lib locations for both 2.0 and 4.0 folders, which contain different sets of assemblies that might be useful when developing an extension.

One final variable which is quite useful to determine the location of PublicAssemblies and PrivateAssemblies (not that you should be using any from there ;) ) is DevEnvDir. As I explained elsewhere, that variable is only populated when building from inside VS. We can create it for command line builds using the same technique as above to make it VS version aware:








<!-- On build servers and command line, this property is not available, so we redefine it in
          terms of the environment variables created by VS when installed -->
< PropertyGroup Condition = "'$(DevEnvDir)' == ''" >
     < VSCommToolsVar >VS$(VisualStudioVersion.Replace('.', ''))COMNTOOLS</ VSCommToolsVar >
     < DevEnvDir >$([System.Environment]::ExpandEnvironmentVariables('%$(VSCommToolsVar)%'))..\IDE\</ DevEnvDir >
</ PropertyGroup >

And on top of that, we can just create the two additional variables for convenience:






< PropertyGroup >
     < PublicAssemblies >$(DevEnvDir)PublicAssemblies\</ PublicAssemblies >
     < PrivateAssemblies >$(DevEnvDir)PublicAssemblies\</ PrivateAssemblies >
</ PropertyGroup >

 

So now you need to updated your references to take advantage of those variables, like:

<Reference Include="Microsoft.VisualStudio.Shell, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
    <SpecificVersion>False</SpecificVersion>
    <HintPath>..\..\..\Program Files (x86)\Microsoft Visual Studio 2010 SDK SP1\VisualStudioIntegration\Common\Assemblies\v2.0\Microsoft.VisualStudio.Shell.dll</HintPath>
</Reference>

To:

<Reference Include="Microsoft.VisualStudio.Shell, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
    <SpecificVersion>False</SpecificVersion>
    <HintPath>$(VSSDK)v2.0\Microsoft.VisualStudio.Shell.dll</HintPath>
</Reference>

 

The final bit is that if your code takes advantage of a particular new feature in a newer version of VS, you’ll need to #ifdef the code (or conditionally include source files). So it’s convenient to have a constant defined too:



< DefineConstants >$(DefineConstants);VS$(VisualStudioVersion.Replace('.', ''))</ DefineConstants >

 

You can look at the final MSBuild properties and targets files directly on Github. Or even better, just install the nuget package and get both added to your VSX project automatically :)



Visual Studio project compatability and VisualStudioVersion

One of the most requested features of Visual Studio 2012 was the ability to open projects in both VS 2012 as well as VS 2010 (requires VS 2010 SP1). In case you haven’t heard we did implement that feature. You may be wondering how we were able to do this and how this may impact you.

If you open the .csproj/.vbproj for a Web Project created in VS2010 you will see the following import statement.

1<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\<br>                  v10.0\WebApplications\Microsoft.WebApplication.targets" />

When you open this project in VS 2012 there are a few changes made to your project file to ensure that it can be opened in both VS 2010 SP1 and VS 2012. One of the changes made to the project when it is first loaded in VS 2012 is to add the following to replace that import statement.

1<PropertyGroup>
2  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
3  <VSToolsPath Condition="'$(VSToolsPath)' == ''">
4    $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
5</PropertyGroup>
6<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />

We removed the hard-coded 10.0 and instead used the property VisualStudioVersion. When building in Visual Studio 2012 this value will always be 11.0, but for VS 2010 it doesn’t exist. That is why we defaulted it to 10.0 above.

There are some scenarios where building from the command line will require to set this property explicitly. Before we get there let me explain how this property gets set (in this order)

  1. If VisualStudioVersion is defined as an environment variable/global MSBuild property, that is used.
    • This is how VS and the VS developer command prompt set this value
  2. Based on the file format version of the .sln file (toolset used is sln file format –1)
    • To simplify this statement, the .sln file will build with specifying VisualStudioVersion to the value of the version of VS which created the .sln file.
  3. Choose default
    • 10.0 if VS 2010 is installed
    • Highest-versioned sub-toolset version installed

For #2 when you are building a .sln file the value of VisulStudioVersion will be –1 of the Format Version found in the .sln file. The important thing to note here is that if you build a .sln file it will build with the value of VisulStudioVersion corresponding to the version of VS which created the .sln file. So if you create a .sln file in VS2012 and you always build that .sln file the value for VisualStudioVersion will be 11.0. In many cases if you build the .sln file you are good.

If you are building .csproj/.vbproj files w/o going through a .sln file? If you build a web project from the command line (not the developer prompt) then the value for VisualStudioVersion used will be 10.0. That is an artifact of the properties which I showed above. In this case you should pass this in as an MSBuild property. For example

1msbuild.exe MyAwesomeWeb.csproj /p:VisualStudioVersion=11.0

In this case I’m passing in the property explicitly. This will always override any other mechanism to determine the value for VisualStudioVersion. If you are using the MSBuild task in a build script, then you can specify the property either in the Properties attribute or the AdditionalProperties attribute. See my previous blog post on the difference between Properties and AdditionalProperties.

If you encounter any funny behavior when building/publishing and you notice that the wrong .targets files are being imported then you may need to specify this property.



Visual Studio项目版本转换工具:原理、实战与问题排查指南 在软件工程实践中,项目文件(如.csproj、.vcxproj)是构建系统的核心配置,它定义了编译目标、依赖关系和构建规则。其原理基于MSBuild引擎,通过XML结构描述项目的所有元数据。这项技术的核心价值在于确保开发环境的一致性,避免因Visual Studio版本差异导致的工具集、SDK路径和包管理格式不兼容问题,从而保障团队协作与持续集成的顺畅。在实际应用场景中,开发者常需将旧版项目迁移至新IDE环境,或在不同版本间切换以维护多分支代码。本文聚焦于自动化转换工具,它能智能更新ToolsVersion 阅读详情

相关推荐

支付系统保证可靠性的秘诀 ----- 订单的补偿和补单

文章目录WHAT? 前言WHY? 为什么要用多级缓存?HOW 怎么做?方案 版本1:数据库存储专线配置通过优先级进行动态上下线方案 版本1 劣势:方案 版本2 :本地缓存替代数据库方案 版本2 劣势:方案 版本3:分布式缓存做自动补偿方案 版本3 总结:Where 分布式多级缓存还能用在哪些地方?总结 WHAT? 前言 刚入职场的时候觉得支付宝等第三方支付系统好强大,要保证这么多的交易不能错,也不能重复还要保证正确的扣钱,直到后面接触订单系统以及第三方支付公司的核心交易系统后才真正窥探到了支付系统的核心

boboaisisi的专栏 3534

MSBuildExtensionsPath32

MSBuildExtensionsPath  MSBuild 子文件夹位于 \Program Files\ 或 \Program Files (x86) 文件夹下。  此路径始终指向与当前正在其中运行的窗口具有相同位数的程序文件。  例如,对于在 64 位的计算机上的 32 位窗口,路径指向 Program Files (x86) 文件夹。  对于在 64 位的计算机上的 64 位

jzt_designer的专栏 3072

继电保护整定值计算软件_「全套69份」整定值计算与设计方案

【全套69份】整定值计算与设计方案,输电线路、变压器、发电机、电容器、母线保护等下载方式见文末内容预览:10kV高压电机保护原理及整定计算35kV环网运行线路继电保护整定计算方案分析35KV以下继电保护及三段式电流保护整定计算110 kv电网计算机整定计算新方案220kV两相式电铁牵引站供电线路的短路故障计算及其保护整定原则分析220kV周潮线接地距离保护整定计算特殊方案750 kV变压器保护配置...

weixin_30825953的博客 5017

.NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换

.NET/C# 程序从 Main 函数开始执行,基本上各种书籍资料都是这么写的。不过,我们可以写多个 Main 函数,然后在项目文件中设置应该选择哪一个 Main 函数。 你可能会觉得这样没有什么用,不过如果你的应用程序在不同的编译条件下有不同的启动代码,或者你需要持续去大范围修改启动代码,那么做一个 Main 函数的选择器是一个不错的选择。 本为内容 ...

weixin_30701575的博客 1235

FitzHugh-Nagumo 模型连续-MATLAB仿真

【代码】FitzHugh-Nagumo 模型连续-MATLAB仿真。

qq_43688618的博客 882

CTF实战:从ECDSA签名漏洞到flag获取

本文详细解析了ECDSA签名算法在CTF比赛中的实战应用,重点探讨了随机数重用和参数泄露等常见漏洞。通过PWNHUB六月赛的例题,展示了如何从签名数据中恢复私钥并获取flag,同时提供了防御措施和实战技巧,帮助参赛者提升解题能力。

weixin_42706667的博客 277

NET Standard/Core中配置使用TargetFrameworks输出多版本类库及测试

在core之前,要使一个项目支持多个Frame版本,那么可行的办法就是创建多个版本的项目,然后以一个项目为主体,其它版本以添加--现有项--添加为链接的方式将代码文件添加到对应版本中,如果代码不同,则需要使用#if标签,而在core之后,如果需要发布多版本,可以不再需要创建多个项目,这里以VS2017为例 首先我们创建一个项目,可以是Standard类库,也可以是Core应用,这里我选择创建一个...

sky 胡萝卜星星 2万+

从编译到启动:RV1106嵌入式Linux系统构建的效率优化与深度实践

本文深入探讨RV1106嵌入式Linux系统构建的全流程优化策略,重点提升编译速度和驱动加载效率。通过并行编译配置、内核裁剪、驱动加载优化和硬件辅助加速等实践方法,显著缩短系统构建和启动时间,为嵌入式开发提供实用指导。

ttt77的博客 1032

perl编程规范

1命名规则 1.1文件命名 文件名称统一用英文字母(大小写)、数字和下划线的组合,长度一般不超过20个字符,文件命名体现功能的含义,正式发布版本不能加入作者信息。PerlScripts文件的扩展名必须是".pl",PerlModule文件的扩展名必须是".pm"。 正确: lucent_file_parser.pl 不是: lucent_file.p 1.2标识符 采用语法模板...

iteye_2022的博客 414

谱方法学习笔记-下(超详细)

《谱方法学习笔记》深入介绍了傅立叶谱方法在解决偏微分方程问题中的理论和实践,提供了清晰的步骤、Matlab代码以及对一维、二维波动方程等不同问题的解析,适合对谱方法感兴趣的学习者。

图灵的猫的博客 2853

【nnUNetv2进阶】三、nnUNetv2 自定义网络-发paper必会

对于很多朋友来说,找到nnunet的网络结构位置的代码可能比较困难,因为nnunet的网络结构从else:代码中没有网络结构的类名,那么使用的网络是哪个呢?打开预处理后的数据集中的nnUNetPlans.json文件,如下图,configurations里面有2d、3d_fullres等,这些表示nnunet的模型,下面的network_class_name指的就是训练使用的模型结构,一般都是PlainConvUNet。

AI爱好者的博客,分享计算机领域相关知识 8757

.NET Standard中配置TargetFrameworks输出多版本类库

NET Standard中配置TargetFrameworks输出多版本类库 系列目录【已更新最新开发文章,点击查看详细】   在.NET Standard/.NET Core技术出现之前,编写一个类库项目(暂且称为基础通用类库PA)且需要支持不同 .NET Framework版本,那么可行的办法就是创建多个不同版本的项目(暂且称为PB1、PB2、PB3 ... PBn)。PB1、PB2、PB3 ... PBn项目分别执行下面操作:【添加】--【现有项】--【添加为链接的方式】,将PA项目...

匠工 4064

系统分析师论文范文(三)微服务

摘要(300字) 2024年4月,我作为系统分析师参与某省三甲医院云影像系统建设项目,负责系统分析与设计工作。该项目旨在响应国家"无胶片化"医疗政策,解决传统影像系统数据孤岛、调阅效率低等问题。系统基于DICOM 3.0和HL7国际标准,采用B/S架构与Spring Cloud Alibaba微服务技术栈,包含影像采集、智能分析、数据安全等核心模块,实现全院影像资源的云端统一管理与多端调阅。在架构设计上,通过微服务拆分、分布式事务控制及多层次安全防护机制,保障了系统的高可用性与数据一致性。系统于2024年1

echo的博客 221

rider开发asp.net webform项目

rider开发asp.net webform项目

qq_36437991的博客 923

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VS2019发布失败,无法发布-旧项目发布时出现:该项目中不存在目标“GatherAllFilesToPublish”。

在项目文件夹下面找到 xxxx.csproj 文件,使用 VisualStudio Code 或者记事本打开(或者任意编辑器,VisualStudio 可能无法编辑) 将以下节点进行更改 <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplic

qq_39334763的博客 2834

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

用VS不同版本打开项目,报错:MS Build Error MSB4019: Microsoft.WebApplication.targets was not found...

本例是在用VS2008打开项目是报错 未找到C:\Program Files\MSBuild\Microsoft\VisualStudio\V10.0 In the last article Build and deploy web application project using NANT script i discusses how various options and configur...

weixin_34270865的博客 997

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

未找到导入的项目,请确认 <Import> 声明中的路径正确

当使用vs出现下列情况: D:\xxxx\Web\Web.csproj : error  : 无法读取项目文件“Web.csproj”。 D:\xxxx\WebServiceManager\Web\Web.csproj(1269,3): 未找到导入的项目“C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Mi...

weixin_34106122的博客 1344

Visual Stdio 配置相关宏解释

配置说明:     1.MSBuild 保留属性小结:         MSBuildProjectDirectory:        项目文件所在的绝对路径。 例如:D:/MyProjects/TestCpp         MSBuildProjectFile:                项目文件的完整文件名(包括文件扩展名),例如: main.cpp         

Jchn lau 1092

vs未找到导入的项目,Import路径错误问题

记事本打开项目Web.csproj 将     <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />     <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />   替换成     <Impo...

m0_37880556的博客 1351

解决VS发布asp.net项目(WebService)报错“该项目中不存在目标GatherAllFilesToPublish”及后续问题

办法在最后。 用VS2017打开一个以前用VS2010写的asp.net项目后,设置好发布选项(发布到文件夹),发布的时候报错如图: 搜索一番,找到的办法是: 在项目文件(xxx.csproj)中,在<ImportProject="$(MSBuildBinPath)\Microsoft.CSharp.targets"/>上面添加一个<PropertyGroup>兄弟节点,添加好后如下: ...

Violinlins 2749

dotnet build报错找不到导入的项目“C:\Program Files\dotnet\sdk\x.x.xxx\Microsoft\VisualStudio\v17.0\WebApplicati

使用EveryThing查找Microsoft.WebApplication.targets,发现在VS2022安装目录下有该文件,猜测问题可能是。在使用dotnet build命令编译项目时,出现错误。目前我能想到的有2种解决办法。

weixin_41914309的博客 1892

推荐开源神器:MSBuild Extension Pack - 让构建自动化更上一层楼!

推荐开源神器:MSBuild Extension Pack - 让构建自动化更上一层楼! 在软件开发过程中,自动化构建是提高效率的关键一环。今天我们要推荐的开源项目——MSBuild Extension Pack,为你的自动化构建带来超过480个MSBuild任务、日志记录器和任务工厂,大大扩展了MSBuild的功能边界。 1、项目介绍 MSBuild Extension Pack是一个强大的工...

gitblog_00099的博客 451

ArcGIS AddIN编译旧版本项目问题

ArcGIS的Addin项目,后来ArcGIS版本升级为高版本 AddIN项目想做一些细节调整,结果出生成时没有生成esriaddin文件,ArcMap中AddIn Manager中也没有该插件。 后来发现问题是由于ESRI对不同版本的VS中SDK命名不一致造成的。 解决方法是: 用记事本打开.csproj项目文件,将其中的路径更改为正确的路径即可, 如 <Import Pro...

jixg1800的专栏 772

Wix 安装教程

original link :  http://www.cnblogs.com/stoneniqiu/p/3355086.html 因为项目需要,最近在研究Wix打包部署,园子里也有一些关于wix的博客,方方面面,讲的点各不同。我自己也在测试过程中,写下过程,以供参考。最新版本WiX Toolset v3.7,如何安装的就不说了,可以参考 http://blog.youkuaiyun.com

w_vc_love的专栏 1万+

.NET魔法堂:工程构建基石->MSBuild

一、前言                             MSBuild是一个既熟悉又陌生的名字,Visual Studio的项目加载和构建均通过MSBuild来实现。VS中右键打开项目菜单,对应MSBuild的Build目标,对应MSBuild的Rebuild目标,对应MSBuild的Clean目标,对 应MSBuild的PublishOn...

weixin_33971977的博客 342
上一篇: HTML Color Code
下一篇: Deploying an ASP.NET Web Application
wmjcom
博客等级 码龄24年 71粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值