我们正在为我们的视觉工作室项目试验nuget.但是,我们只(或至少主要)将nuget用于我们自己的外部引用,并将它们存储在本地存储库(网络共享)中.我想知道的是如何处理整个调试/发布情况.
具体(简化)情况:
我们有一个主项目,它引用了我们自己开发的两个共享组件.这些共享组件也用于我们公司的其他产品
当我们在构建服务器上构建主项目(tfs 2015构建任务)时,我们构建项目的调试和发布版本.但是,我们只能为每个外部引用指定一个nuget包.
我们希望在调试版本期间使用共享组件的调试版本以及在发布版本期间使用发行版本.然而,这些(据我所知)实际上是不同的包.
解决这个问题的方法是什么?例如,是否有一种方法可以在单个nuget包中包含发行版和调试版?是否可以针对不同的构建配置设置使用不同的nuget配置?
我找到了Nuget的最佳实践:调试还是发布?但是这个主题并没有真正解决我的问题.该线程更多地讨论了是否将调试版或发布版发布到远程服务器.我们希望发布两者并同时使用它们,但仅限于本地服务器.我们无意与世界其他地方分享我们的图书馆.
我们有(相当大的)使用 .Net Framework 4.8 的 ASP.Net Webforms 应用程序,在具有多个实例(横向扩展)的 azure 应用程序服务中运行。该应用程序使用一组 azure sql 数据库和 azure blob 存储作为数据存储。我们在应用服务的句柄计数中发现了一些有趣的峰值。我们每天都会看到几个高峰。这似乎不是句柄泄漏,因为在峰值之后句柄计数返回到其原始值。我一直在搜索文档以找到一种方法来解决这些峰值的来源,但我一无所获。
我正在寻找方法来确定导致这些峰值的原因以解决问题。我认为这是我们软件中的问题,但我不知道如何查明问题。
解决这些峰值问题的最佳方法是什么?
我正在寻找一种从iQueryable对象动态创建选择列表的方法.
具体的例子,我想做类似以下的事情:
public void CreateSelectList(IQueryable(of EntityModel.Core.User entities), string[] columns)
{
foreach(var columnID in columns)
{
switch(columnID)
{
case "Type":
SelectList.add(e => e.UserType);
break;
case "Name":
SelectList.add(e => e.Name);
break;
etc....
}
}
var selectResult = (from u in entities select objSelectList);
}
Run Code Online (Sandbox Code Playgroud)
因此,所有属性都是已知的,但我事先并不知道要选择哪些属性.这将通过columns参数传递.
我知道我将遇到selectResult类型的问题,因为当选择列表是动态的时,编译器不知道匿名类型的属性需要是什么.
如果上述情况不可能:我需要它的场景如下:
我正在尝试创建一个可以实现的类来显示分页/过滤的数据列表.这些数据可以是任何东西(取决于实现).使用的linq是实体的linq.所以它们直接链接到sql数据.现在我只想选择我实际在列表中显示的实体的列.因此我希望select是动态的.我的实体可能有一百个属性,但如果列表中只显示了3个属性,我不想生成一个选择所有100列数据的查询,然后只使用其中的3个.如果有一种我没有想到的不同方法,我会接受各种想法
编辑:
关于约束的一些澄清:- 查询需要使用linq到实体(请参阅问题主题)
- 实体可能包含100列,因此选择所有列然后只读取我需要的列不是一个选项.
- 最终用户决定要显示哪些列,因此要选择的列在运行时确定
- 我需要创建一个SINGLE选择,有多个select语句意味着对数据库有多个查询,我不想要
我们正在将我们的产品迁移到云端。我目前正在测试将我们的 Web 应用程序部署到 azure Web 应用程序。我们的应用程序由两部分组成。一个 ASP.Net Webforms 应用程序和一个 ASP.Net Web API 项目。这些项目是 2 个独立的应用程序,需要作为 2 个独立的应用程序在 azure 中运行。我已将 Web 应用程序配置如下:
如您所见,api 是根的子应用程序。现在我有 2 个部署任务 (AzureRmWebAppDeployment@4),用于部署网站和 API。部署网站的任务运行没有任何问题。但是,部署 api 的任务会引发错误:
Got service connection details for Azure App Service:'***'
##[error]Error: Failed to create path 'site/wwwroot/api' from Kudu. Error: Conflict (CODE: 409)
Successfully added release annotation to the Application Insight : ***
Successfully updated deployment History at https://***.scm.azurewebsites.net/api/deployments/***
App Service Application URL: http://***.azurewebsites.net/api
Finishing: Publish API to Azure
Run Code Online (Sandbox Code Playgroud)
显然它无法在 wwwroot 中创建“api”文件夹。
诊断日志显示它确定“api”文件夹不存在,并在尝试创建它时发生冲突错误:
##[debug]Virtual …Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何使用 yaml 管道将应用程序部署到多网络节点环境。
我正在尝试创建一个具有 2 个阶段的管道。阶段 1 将构建项目,阶段 2 将其部署到暂存环境。这个登台环境(目前)有 2 个网络节点。我不想对要部署到我的管道中的实际机器进行硬编码。所以我想我会添加一个变量组,其中包含一个包含要部署到的 Web 节点的变量,并使用“每个”语句为每个节点生成一个作业。
但是,由于以下几个原因,这不起作用:
所以我的问题是,其他人如何解决这个问题?我想在中心位置定义要部署的服务器,而不是在我的管道定义中。
我最初的尝试印在下面。这不起作用,但它确实描述了我想要完成的工作。
主要 yaml:
variables:
- group: LicenseServerVariables #this contains StagingWebNodes variable
stages:
- stage: Build
displayName: Build
<some build steps>
- stage: DeployTest
displayName: Deploy on test
condition: and(succeeded(), eq(variables['DeployToTest'], 'true'))
jobs:
- template: Templates\Deploy.yaml
parameters:
nodes: $(StagingWebNodes)
Run Code Online (Sandbox Code Playgroud)
部署.yaml:
parameters:
nodes: []
jobs:
- ${{ each node in parameters.nodes }}:
- job: ${{ node }}
displayname: deploy to ${{ node }}
pool: …Run Code Online (Sandbox Code Playgroud) 我们已经使用 azure devops 一段时间了,我们在存储库中有一个非常大的套件,有一个广泛的 yaml 管道。它有各种并行作业,我们有多个托管代理可用于并行运行这些作业。为了加快构建速度,我进行了各种优化(例如缓存 nuget 包)。但是,由于我们的存储库的大小,管道作业甚至在开始任何任务之前运行大约 2 分半钟,因为它正在运行检出任务以将源获取到托管代理。
我们可能在项目开始时向存储库添加了一些不需要的大文件,这可能导致存储库有点膨胀。我找到了一些关于如何从存储库中删除大文件的文档,但该文档对此非常模糊。这是尝试改善结帐时间的正确方法吗?如果是这样,是否有人可以详细说明如何从 git 存储库中删除不需要的文件并将其推送到 azure devops?
如果我可以做任何其他事情来提高结帐速度(除了使用私人代理),我愿意接受想法
为了最大限度地减少重复的构建脚本,我们在管道中使用模板。这些模板有参数。但是,我现在遇到了一个问题,因为我需要将数据传递到管道启动时尚不可用的模板。(数据是在管道期间的某些步骤中生成的)。由于管道启动时参数会扩展,因此我无法通过参数将数据传递到模板。
我知道我可以引用管道中不同任务、作业和阶段的输出变量,但我使用的模板不知道它在其中执行的周围管道。因此模板不知道如何引用输出变量来自模板之外的其他作业,只是因为模板不知道之前执行过哪些作业。
有什么方法可以在模板中映射变量吗?理想情况下我想做这样的事情:
stages:
- stage: Stage1
jobs:
- some job that creates output variables
- stage: Stage2
jobs:
- template: 'myTemplate.yaml'
variables:
data1: $[ stageDependencies.Stage1.some_job.outputs['taskname.data1']]
Run Code Online (Sandbox Code Playgroud)
并在模板中提供 data1 变量。
$[ stageDependencies.Stage1.some_job.outputs['taskname.data1']] 因此,我试图避免在 template 中使用:,因为Stage1甚至可能不存在于使用该模板的所有管道中。
如果模板只包含步骤,而不是多个作业,我实际上可以做到这一点:
- stage: Stage2
jobs:
- job: Job1
variables:
data1: $[ stageDependencies.Stage1.some_job.outputs['taskName.data1']]
steps:
- template: templates/Azure/CreateTenant.yaml
Run Code Online (Sandbox Code Playgroud)
不幸的是,我的模板包含多个作业
更新:我已输入功能请求以更好地支持这种情况: https://developercommunity.visualstudio.com/idea/1207453/yaml-template-variablesparameters-that-are-expande.html