ASP.NET Website在VSTS中构建无对应模板及产物生成问题咨询
解决ASP.NET Website在VSTS(Azure DevOps)中的构建配置与csproj生成问题
先给你理清楚核心问题:ASP.NET Website(文件系统网站)和ASP.NET Web Application是两种不同的项目类型,前者没有.csproj文件,而VSTS默认的构建模板是为后者设计的,这就是你找不到对应模板、构建后无产物的原因。下面分两种方案解决你的问题:
方案一:生成.csproj文件(推荐,后续维护更方便)
方法1:通过Visual Studio转换为Web应用程序
- 打开VS2017,加载你的Website对应的
.sln文件。 - 在解决方案资源管理器中,右键点击你的Website项目(注意不是解决方案),选择转换为Web应用程序。
- 这个操作会自动生成对应的
.csproj文件,同时为每个ASPX/ASCX页面生成.designer.cs文件(如果之前没有的话)。 - 完成后,将新生成的
.csproj和.designer.cs文件提交到TFS,之后就能在VSTS中使用标准的ASP.NET Web Application构建模板了——模板会自动识别.csproj,构建后也会正常生成可部署的产物。
方法2:新建Web Application项目迁移文件
如果转换选项找不到(比如某些版本的VS可能隐藏了这个选项),可以用这个方法:
- 在VS2017中新建一个空的ASP.NET Web Application项目,确保它的.NET版本和原Website一致。
- 将原Website中的所有文件(包括
App_Code、App_Data、页面、配置文件等)复制到新建的Web Application项目目录下。 - 在VS中加载这个新项目的
.sln,检查引用和配置是否正确,然后提交.csproj和所有文件到TFS。
方案二:不生成.csproj,直接在VSTS中配置自定义构建
如果你暂时不想转换项目,可以通过自定义MSBuild任务来完成构建并生成产物:
- 在VSTS中创建一个空的构建定义(不要选任何预设模板)。
- 添加获取源代码任务(默认会自动添加,确认TFS仓库路径正确即可)。
- 添加MSBuild任务,配置如下:
- MSBuild版本:选择和你项目匹配的版本(比如VS2017对应的MSBuild 15.x)。
- MSBuild参数:输入以下命令,替换你的解决方案文件名(如果有的话):
解释:/t:Build /p:Configuration=Release /p:DeployOnBuild=true /p:WebPublishMethod=FileSystem /p:PublishUrl=$(Build.ArtifactStagingDirectory)DeployOnBuild=true告诉MSBuild在构建后执行发布,WebPublishMethod=FileSystem指定发布到本地文件系统,PublishUrl指向VSTS的工件暂存目录,这样产物会自动放到后续可以发布的位置。 - 解决方案:如果有
.sln文件,选择它;如果没有,直接留空或者指定网站的根目录(不过推荐用sln来管理)。
- 添加发布构建工件任务:
- 工件名称:随便填一个(比如
WebsiteArtifact)。 - 工件发布位置:选择Azure Pipelines(或者你需要的其他位置)。
- 要发布的路径:填写
$(Build.ArtifactStagingDirectory),这样之前MSBuild发布的产物就会被上传到VSTS的工件库中。
- 工件名称:随便填一个(比如
为什么之前构建成功但无产物?
默认的ASP.NET构建模板会查找.csproj文件,执行针对Web Application的构建和发布流程,但你的Website没有.csproj,模板的发布步骤根本没触发——看起来构建“成功”只是因为它完成了解决方案的编译,但没有生成可部署的产物。自定义MSBuild任务通过显式指定发布参数,才会把网站打包成可部署的文件。
内容的提问来源于stack exchange,提问作者Shubham Khandelwal
相关产品推荐
相关产品推荐

