我正在尝试使用带有MSBuild和Team Foundation Server的autodeploy将控制台应用程序部署到DMZ服务器上的文件夹.
我已经在同一台服务器上部署了多个站点,效果很好.我尝试了多种方法,但没有部署文件.
首先,我尝试以与我的网站相同的方式部署控制台应用程序,即:
<MSBuild
Projects="$(SolutionRoot)\MySolution.sln"
Properties="AllowUntrustedCertificate=True;AuthType=Basic;
Configuration=DEBUG;CreatePackageOnPublish=True;
DeployIisAppPath=Default Website/dummy.dev.myapp;
DeployOnBuild=True;DeployTarget=MsDeployPublish;
MSDeployPublishMethod=WMSvc;
MsDeployServiceUrl=https://xxx.xxx.xxx.xxx:8172/MsDeploy.axd;
UserName=userid;Password=password;UseMsdeployExe=True"
/>
Run Code Online (Sandbox Code Playgroud)
没有成功.
编辑:没有返回错误消息.一切似乎进展顺利.
然后,我还尝试按如下方式部署控制台应用程序:
<Exec Command=""C:\Program Files\IIS\Microsoft Web Deploy V2\MSDeploy.exe"
-verb:sync
-source:contentpath="$(OutDir)\MyApp.Precompiled"
-dest:contentpath="D:\dev.myapp",computername=xxx.xxx.xxx.xxx,username=userid,password=password"
ContinueOnError="false" />
Run Code Online (Sandbox Code Playgroud)
我实际上也试过用computername作为https://xxx.xxx.xxx.xxx:8172/MsDeploy.axd.
编辑:以下是我得到的.EXEC:FileOrFolderNotFound EXEC:无法创建"contentPath"类型的对象和路径"E:\ Builds\1 ...\dev.myapp".EXEC:路径'\?\ E:\ Builds\1 ...\dev.myapp'无效.EXEC:1.E:\ Builds\1 ...\BuildType\Targets\Deploy.targets(142):命令""C:\ Program Files\IIS\Microsoft Web Deploy V2\MSDeploy.exe"-verb:sync -source:contentpath ="E:\ Builds\1 ...\dev.myapp"-dest:contentpath ="D:\ dev.myapp",computername = https://xxx.xxx.xxx.xxx:8172/MsDeploy.axd,username = userid,password = password"退出,代码为-1.我意识到我没有读过所有的错误,我真的需要一个UNC路径吗?
有谁知道如何做到这一点?
我们成功地使用TFS2010中的msdeploy每天更新我们的开发网站.
这工作正常,直到我们升级到VS2012,我们的应用程序从.NET Framework 4.0升级到4.5,ASP.NET MVC从3.0升级到4.0.看起来一切都很好并且部署了程序集但实际上没有部署任何内容.
我现在已经研究了两天了,无法弄清楚为什么会发生这种情况,现在我的想法已经不多了.
以下是我的构建脚本的一部分,它在升级之前的工作方式.
<MSBuild
Projects="$(SolutionRoot)\My.Web\My.Web.csproj"
Properties="MvcBuildViews=False;AllowUntrustedCertificate=True;AuthType=Basic;Configuration=Dev;CreatePackageOnPublish=True;DeployIisAppPath=dev.myweb;DeployOnBuild=True;DeployTarget=MsDeployPublish;MSDeployPublishMethod=WMSvc;MsDeployServiceUrl=https://10.xxx.xxx.xxx:8172/MsDeploy.axd;UserName=UserName;Password=Password;UseMsdeployExe=True"
ContinueOnError="False"
/>
Run Code Online (Sandbox Code Playgroud)
启动升级并且我的问题发现我们使用的是Web Deploy 2.0,但现在我们已升级到Web Deploy 3.0.我也确保我们正在建设ToolsVersion="4.0".
更新 -
msbuild.exe/p:AllowUntrustedCertificate = True/p:AuthType = Basic/p:Configuration = Dev/p:CreatePackageOnPublish = True /p:DeployIisAppPath=dev.myweb/p:DeployOnBuild = True/p:DeployTarget = MsDeployPublish/p: MSDeployPublishMethod = WMSvc /p:MsDeployServiceUrl=https://10.xxx.xxx.xxx:8172/MsDeploy.axd/p:UserName = UserName/p:Password = Password/p:UseMsdeployExe = True E:\ Builds\1 \无论\ Daily_Build的\ Sources\My.Web\My.Web.csproj
现在我也尝试从我们的TFS运行上面的msbuild命令,没有任何响应让我完全失望.在TFS的事件日志中没有任何内容,日志文件中没有任何内容,无论冗长...有什么想法吗?
它确实可以使用msdeploy directy,如下所示;
<Exec Command=""C:\Program Files\IIS\Microsoft Web Deploy V3\MSDeploy.exe" -verb:sync -source:contentPath="E:\Builds\1\WhatEver\Daily_Build\Sources\My.Web\My.Web.csproj" -dest:contentPath="E:\dev.my.web",computername=https://10.xxx.xxx.xxx:8172/MsDeploy.axd,username=UserName,password=Password,authtype=Basic -allowUntrusted=True"
ContinueOnError="false" />
Run Code Online (Sandbox Code Playgroud)
-
更新2 - 似乎Microsoft添加了对可发布项目的类型项目和我们的Web应用程序不是的检查,因为输出类型是类库.这对v4.0有效,但显然不适用于v4.5.
任何人都知道该怎么做让它再次起作用?我需要更改项目类型吗?预先创建发布包,然后部署它?或者是什么?
-
有其他人遇到过同样的问题吗?你找到了分享的解决方案吗?
MSBuild版本可能存在问题吗?
这是我的情况,非常简化.
我的课程;
public class ClassBase
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
}
public class ClassMiddle1 : ClassBase
{
}
public class ClassMiddle2 : ClassBase
{
public Guid Token { get; set; }
}
public class ClassA : ClassMiddle1
{
public string UserId { get; set; }
public string Username { get; set; }
}
public class ClassB : ClassMiddle2
{
public string Username { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
而我的OnModelCreating;
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ClassBase>() …Run Code Online (Sandbox Code Playgroud) 我想创建一个与我的viewmodel一起使用的属性.我想根据第三个值显示不同的文本字符串.
我想做这样的事......
[DisplayIf("IsPropertyValid", true, Name="value 1")]
[DisplayIf("IsPropertyValid", false, Name="value 2")]
public string MyProperty { get; set; }
public bool IsPropertyValid { get; set; }
Run Code Online (Sandbox Code Playgroud)
根据我的值IsPropertyValid是否为真,我想显示一个或另一个.IE浏览器.当属性IspPropertyValid等于true时,"value 1"将是displaytext,如果不是,则它将是"value 2".
ASPNET.MVC属性可以实现吗?或者甚至更好......像......一样的组合......
[DisplayIf("IsPropertyValid", new {"value 1", "value 2"})].
public string MyProperty { get; set; }
public bool IsPropertyValid { get; set; }
Run Code Online (Sandbox Code Playgroud)
然后该属性检查IsPropertyValid的值,并确保显示的值为"value 1"或"value 2".
与外部服务集成时,我们有几个单元测试。这些服务可能不稳定,并且超出了我们的控制范围,因此有必要将其从我们的日常构建中删除。
由于通常的单元测试是作为门控检入的一部分运行的,因此我们已经在单独的组件中进行了集成测试。
虽然,我们仍希望在日常构建中运行许多集成测试,因此我们无法从日常构建中完全删除程序集。
我试图删除[TestClass]属性,并且在VS2012中可以正常工作。但是,当我们签入并使用TFS(2010)进行构建和运行测试时,出现以下错误。
[错误消息] = UTA004:在Test.TestMethod上非法使用属性。只能在标有TestClass属性的类内部定义TestMethodAttribute。
任何人都知道如何完全删除测试运行吗?[忽略]不会执行,那么我的测试运行将被关于被忽略的测试的警告所困扰。
我在 Azure 中将此应用程序服务作为 Web 作业运行。该应用程序是使用 NServiceBus 构建的前 Windows 服务,我一直在重新配置它以在 Azure 中工作。
该应用程序正在使用 AzureServiceBusTransport,并且我的 Azure 服务总线设置了队列。
我得到它的工作......当我使用在我的连接字符串中配置的共享访问密钥时,如下所示;
"ConnectionString": "Endpoint=sb://MYNAMESPACE.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=***"
Run Code Online (Sandbox Code Playgroud)
为了使其与托管身份一起使用,我在 NServiceBus EndpointConfiguration 中重新配置了:
transport.CustomTokenCredential(new DefaultAzureCredential());
Run Code Online (Sandbox Code Playgroud)
我还将连接字符串更改为以下内容;
"ConnectionString": "Endpoint=sb://MYNAMESPACE.servicebus.windows.net/;Authentication=ManagedIdentity"
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用托管身份时,我收到以下异常;
ArgumentException:值“Endpoint=sb://MYNAMESPACE.servicebus.windows.net/;Authentication=ManagedIdentity”不是格式良好的服务总线完全限定命名空间。
当我使用共享访问密钥时,MYNAMESPACE 显然是正确的,但当我使用托管身份时却不正确?
我们确实有一个可以使用托管身份的 Azure 功能,并且在这种情况下使用:
"ConnectionString": "Endpoint=sb://MYNAMESPACE.servicebus.windows.net/;Authentication=ManagedIdentity"
Run Code Online (Sandbox Code Playgroud)