本文整理汇总了C#中ThoughtWorks.CruiseControl.Remote.IntegrationRequest类的典型用法代码示例。如果您正苦于以下问题:C# IntegrationRequest类的具体用法?C# IntegrationRequest怎么用?C# IntegrationRequest使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
IntegrationRequest类属于ThoughtWorks.CruiseControl.Remote命名空间,在下文中一共展示了IntegrationRequest类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。
示例1: GenerateFullManifest
public void GenerateFullManifest()
{
ManifestGenerator generator = new ManifestGenerator();
IntegrationRequest request = new IntegrationRequest(BuildCondition.ForceBuild, "Somewhere", null);
IntegrationSummary summary = new IntegrationSummary(IntegrationStatus.Success, "A Label", "Another Label", new DateTime(2009, 1, 1));
IntegrationResult result = new IntegrationResult("Test project", "Working directory", "Artifact directory", request, summary);
Modification modification1 = GenerateModification("first file", "Add");
Modification modification2 = GenerateModification("second file", "Modify");
result.Modifications = new Modification[] { modification1, modification2 };
List<string> files = new List<string>();
files.Add("first file");
XmlDocument manifest = generator.Generate(result, files.ToArray());
Assert.IsNotNull(manifest);
string actualManifest = manifest.OuterXml;
string expectedManifest = "<manifest>" +
"<header project=\"Test project\" label=\"A Label\" build=\"ForceBuild\" status=\"Unknown\">" +
"<modification user=\"johnDoe\" changeNumber=\"1\" time=\"2009-01-01T00:00:00\">" +
"<comment>A comment</comment>" +
"<file name=\"first file\" type=\"Add\" />" +
"<file name=\"second file\" type=\"Modify\" />" +
"</modification>" +
"</header>" +
"<file name=\"first file\" />" +
"</manifest>";
Assert.AreEqual(expectedManifest, actualManifest);
}
开发者ID:kyght,项目名称:CruiseControl.NET,代码行数:26,代码来源:ManifestGeneratorTests.cs
示例2: Fire
public IntegrationRequest Fire()
{
IntegrationRequest request = null;
if (this.lastChanged.HasValue)
{
if (this.InnerTrigger.Fire() != null)
{
var changeTime = File.GetLastWriteTime(this.MonitorFile);
if (changeTime > this.lastChanged.Value)
{
request = new IntegrationRequest(
this.BuildCondition,
this.GetType().Name,
null);
this.lastChanged = changeTime;
}
}
}
else
{
this.lastChanged = File.GetLastWriteTime(this.MonitorFile);
}
return request;
}
开发者ID:kascomp,项目名称:CruiseControl.NET,代码行数:25,代码来源:FileChangedTrigger.cs
示例3: SetUp
public void SetUp()
{
integrationQueues = new IntegrationQueueSet();
integrationQueues.Add(TestQueueName, new DefaultQueueConfiguration(TestQueueName));
integrationQueues.Add(TestQueueName2, new DefaultQueueConfiguration(TestQueueName2));
integrationQueue1 = integrationQueues[TestQueueName];
integrationQueue2 = integrationQueues[TestQueueName2];
integrationRequest = new IntegrationRequest(BuildCondition.ForceBuild, "Test", null);
project1Mock = new LatchMock(typeof (IProject));
project1Mock.Strict = true;
project1Mock.SetupResult("Name", "ProjectOne");
project1Mock.SetupResult("QueueName", TestQueueName);
project1Mock.SetupResult("QueuePriority", 0);
project2Mock = new LatchMock(typeof (IProject));
project2Mock.Strict = true;
project2Mock.SetupResult("Name", "ProjectTwo");
project2Mock.SetupResult("QueueName", TestQueueName2);
project2Mock.SetupResult("QueuePriority", 0);
queueNotifier1Mock = new LatchMock(typeof (IIntegrationQueueNotifier));
queueNotifier1Mock.Strict = true;
queueNotifier2Mock = new LatchMock(typeof (IIntegrationQueueNotifier));
queueNotifier2Mock.Strict = true;
integrationQueueItem1 = new IntegrationQueueItem((IProject) project1Mock.MockInstance,
integrationRequest, (IIntegrationQueueNotifier) queueNotifier1Mock.MockInstance);
integrationQueueItem2 = new IntegrationQueueItem((IProject) project2Mock.MockInstance,
integrationRequest, (IIntegrationQueueNotifier) queueNotifier2Mock.MockInstance);
}
开发者ID:kascomp,项目名称:CruiseControl.NET,代码行数:34,代码来源:IntegrationQueueSetTest.cs
示例4: GetHashCodeReturnsAValidHasCode
public void GetHashCodeReturnsAValidHasCode()
{
IntegrationRequest request = new IntegrationRequest(BuildCondition.ForceBuild,
"Me",
null);
int expected = request.ToString().GetHashCode();
int actual = request.GetHashCode();
Assert.AreEqual(expected, actual);
}
开发者ID:kascomp,项目名称:CruiseControl.NET,代码行数:9,代码来源:IntegrationRequestTests.cs
示例5: HasAttributesAssignedCorrectly
public void HasAttributesAssignedCorrectly()
{
IProject project = new Project();
IntegrationRequest integrationRequest = new IntegrationRequest(BuildCondition.NoBuild, "Test", null);
IIntegrationQueueNotifier integrationQueueNotifier = new TestIntegrationQueueCallback();
IIntegrationQueueItem integrationQueueItem = new IntegrationQueueItem(project, integrationRequest, integrationQueueNotifier);
Assert.AreEqual(project, integrationQueueItem.Project);
Assert.AreEqual(integrationRequest, integrationQueueItem.IntegrationRequest);
Assert.AreEqual(integrationQueueNotifier, integrationQueueItem.IntegrationQueueNotifier);
}
开发者ID:kascomp,项目名称:CruiseControl.NET,代码行数:12,代码来源:IntegrationQueueItemTest.cs
示例6: VerifyNewGetSourceProcessInfoWithAttributes
public void VerifyNewGetSourceProcessInfoWithAttributes()
{
IntegrationRequest request = new IntegrationRequest(BuildCondition.ForceBuild, "source", null);
IntegrationSummary lastSummary = new IntegrationSummary(IntegrationStatus.Success, "label", "lastlabel", DateTime.Now);
IntegrationResult result = new IntegrationResult("test", @"c:\workspace", @"c:\artifacts", request, lastSummary);
PlasticSCM plasticscm = new PlasticSCM();
NetReflector.Read(PLASTICSCM_XML, plasticscm);
string expected = @"c:\plastic\client\cm.exe stb br:/main -repository=mainrep";
ProcessInfo info = plasticscm.GoToBranchProcessInfo(result);
Assert.AreEqual(expected, info.FileName + " " + info.Arguments);
}
开发者ID:kascomp,项目名称:CruiseControl.NET,代码行数:13,代码来源:PlasticSCMTest.cs
示例7: VerifyNewGetSourceProcessInfoBasic
public void VerifyNewGetSourceProcessInfoBasic()
{
IntegrationRequest request = new IntegrationRequest(BuildCondition.ForceBuild, "source", null);
IntegrationSummary lastSummary =
new IntegrationSummary(IntegrationStatus.Success, "label", "lastlabel", DateTime.Now);
IntegrationResult result = new IntegrationResult("test", @"c:\workspace", @"c:\artifacts", request, lastSummary);
PlasticSCM plasticscm = new PlasticSCM();
NetReflector.Read(PLASTICSCM_BASIC_XML, plasticscm);
string expected = @"cm update c:\workspace";
ProcessInfo info = plasticscm.NewGetSourceProcessInfo(result);
Assert.AreEqual(expected, info.FileName + " " + info.Arguments);
}
开发者ID:robrich,项目名称:CruiseControl.NET,代码行数:13,代码来源:PlasticSCMTest.cs
示例8: VerifyCreateLabelProcessInfoWithAttributes
public void VerifyCreateLabelProcessInfoWithAttributes()
{
IntegrationRequest request = new IntegrationRequest(BuildCondition.ForceBuild, "source", null);
IntegrationSummary lastSummary = new IntegrationSummary(IntegrationStatus.Success, "label", "lastlabel", DateTime.Now);
IntegrationResult result = new IntegrationResult("test", @"c:\workspace", @"c:\artifacts", request, lastSummary);
result.Label = "1";
//check with attributes
PlasticSCM plasticscm = new PlasticSCM();
NetReflector.Read(PLASTICSCM_XML, plasticscm);
string expected = @"c:\plastic\client\cm.exe mklb BL1";
ProcessInfo info = plasticscm.CreateLabelProcessInfo(result);
Assert.AreEqual (expected, info.FileName + " " + info.Arguments);
}
开发者ID:derrills1,项目名称:ccnet_gitmode,代码行数:14,代码来源:PlasticSCMTest.cs
示例9: StartNewIntegration
/// <summary>
/// Starts a new integration result.
/// </summary>
/// <param name="request">The request.</param>
/// <returns>
/// The new <see cref="IIntegrationResult"/>.
/// </returns>
public IIntegrationResult StartNewIntegration(IntegrationRequest request)
{
var result = resultManager.StartNewIntegration(request);
// Copy any parameters to the result
if ((request.BuildValues != null) && (request.BuildValues.Count > 0))
{
result.Parameters.AddRange(
NameValuePair.FromDictionary(request.BuildValues));
}
result.MarkStartTime();
this.GenerateSystemParameterValues(result);
return result;
}
开发者ID:kascomp,项目名称:CruiseControl.NET,代码行数:22,代码来源:IntegrationRunner.cs
示例10: IntegrationResult
public IntegrationResult(string projectName, string workingDirectory, string artifactDirectory, IntegrationRequest request, IntegrationSummary lastIntegration)
{
ProjectName = projectName;
WorkingDirectory = workingDirectory;
ArtifactDirectory = artifactDirectory;
this.request = (lastIntegration.IsInitial()) ? new IntegrationRequest(BuildCondition.ForceBuild, request.Source, request.UserName) : request;
this.lastIntegration = lastIntegration;
if ((lastIntegration.Status == IntegrationStatus.Exception)
|| (lastIntegration.Status == IntegrationStatus.Failure))
failureUsers = lastIntegration.FailureUsers; // Inherit the previous build's failureUser list if it failed.
buildProgressInformation = new BuildProgressInformation(artifactDirectory, projectName);
this.label = this.LastIntegration.Label;
}
开发者ID:derrills1,项目名称:ccnet_gitmode,代码行数:15,代码来源:IntegrationResult.cs
示例11: FireFiresAfterTimePeriodHasExpired
public void FireFiresAfterTimePeriodHasExpired()
{
var innerTrigger = this.mocks.StrictMock<ITrigger>();
Expect.Call(() => { innerTrigger.IntegrationCompleted(); });
var expected = new IntegrationRequest(BuildCondition.IfModificationExists, "Test", null);
Expect.Call(innerTrigger.Fire()).Return(expected);
var clock = new TestClock { Now = DateTime.Now };
var trigger = new RollUpTrigger(clock);
trigger.MinimumTime = new Timeout(10, TimeUnits.MINUTES);
trigger.InnerTrigger = innerTrigger;
mocks.ReplayAll();
trigger.IntegrationCompleted();
clock.TimePasses(new TimeSpan(0, 11, 0));
var actual = trigger.Fire();
Assert.AreSame(expected, actual);
mocks.VerifyAll();
}
开发者ID:kascomp,项目名称:CruiseControl.NET,代码行数:17,代码来源:RollUpTriggerTest.cs
示例12: CancellingAPendingRequestWhileBuildingIgnoresState
public void CancellingAPendingRequestWhileBuildingIgnoresState()
{
IProject project = (IProject) projectMock.MockInstance;
IntegrationRequest request1 = new IntegrationRequest(BuildCondition.IfModificationExists, "intervalTrigger", null);
projectMock.Expect("NotifyPendingState");
IntegrationRequest request2 = new IntegrationRequest(BuildCondition.IfModificationExists, "intervalTrigger", null);
// As pending build is cancelled we should not alter state
projectMock.ExpectNoCall("NotifyPendingState");
projectMock.ExpectNoCall("NotifySleepingState");
integrationTriggerMock.Expect("IntegrationCompleted");
integrationQueue.Enqueue(new IntegrationQueueItem(project, request1, integrator));
integrationQueue.Enqueue(new IntegrationQueueItem(project, request2, integrator));
// Cancel second build project on queue
integrator.CancelPendingRequest();
VerifyAll();
}
开发者ID:derrills1,项目名称:ccnet_gitmode,代码行数:20,代码来源:ProjectIntegratorTest.cs
示例13: ImportAbsoluteBasedManifest
public void ImportAbsoluteBasedManifest()
{
string sourceFile = Path.Combine(Path.GetTempPath(), "ImportManifest.xml");
string expectedManifest = "<manifest>" +
"From a file" +
"</manifest>";
if (File.Exists(sourceFile)) File.Delete(sourceFile);
File.WriteAllText(sourceFile, expectedManifest);
ManifestImporter generator = new ManifestImporter();
generator.FileName = sourceFile;
IntegrationRequest request = new IntegrationRequest(BuildCondition.ForceBuild, "Somewhere", null);
IntegrationSummary summary = new IntegrationSummary(IntegrationStatus.Success, "A Label", "Another Label", new DateTime(2009, 1, 1));
IntegrationResult result = new IntegrationResult("Test project", "Working directory", "Artifact directory", request, summary);
List<string> files = new List<string>();
XmlDocument manifest = generator.Generate(result, files.ToArray());
Assert.IsNotNull(manifest);
string actualManifest = manifest.OuterXml;
Assert.AreEqual(expectedManifest, actualManifest);
}
开发者ID:kascomp,项目名称:CruiseControl.NET,代码行数:21,代码来源:ManifestImporterTests.cs
示例14: FirePassesOnParameters
public void FirePassesOnParameters()
{
var parameters = new[]
{
new NameValuePair("test", "testValue")
};
var request = new IntegrationRequest(BuildCondition.IfModificationExists, "test", null);
var innerTriggerMock = this.mocks.StrictMock<ITrigger>();
Expect.Call(innerTriggerMock.Fire()).Return(request);
var trigger = new ParameterTrigger
{
InnerTrigger = innerTriggerMock,
Parameters = parameters
};
mocks.ReplayAll();
var actual = trigger.Fire();
mocks.VerifyAll();
Assert.AreSame(request, actual);
Assert.AreEqual(1, request.BuildValues.Count);
Assert.AreEqual(parameters[0].Value,
request.BuildValues[parameters[0].Name]);
}
开发者ID:kascomp,项目名称:CruiseControl.NET,代码行数:23,代码来源:ParameterTriggerTests.cs
示例15: WriteRequest
private void WriteRequest(IntegrationRequest request)
{
if (request == null) return;
writer.WriteStartElement(Elements.Request);
writer.WriteAttributeString("source", request.Source);
writer.WriteAttributeString("buildCondition", request.BuildCondition.ToString());
writer.WriteString(request.ToString());
writer.WriteEndElement();
// Output the parameters
if ((request.BuildValues != null) && (request.BuildValues.Count > 0))
{
writer.WriteStartElement(Elements.Parameters);
foreach (string key in request.BuildValues.Keys)
{
writer.WriteStartElement(Elements.Parameter);
writer.WriteAttributeString("name", key);
writer.WriteAttributeString("value", request.BuildValues[key]);
writer.WriteEndElement();
}
writer.WriteEndElement();
}
}
开发者ID:robrich,项目名称:CruiseControl.NET,代码行数:23,代码来源:XmlIntegrationResultWriter.cs
示例16: CreateInitialIntegrationResult
/// <summary>
/// Creates the initial integration result.
/// </summary>
/// <param name="project">The project.</param>
/// <param name="workingDirectory">The working directory.</param>
/// <param name="artifactDirectory">The artifact directory.</param>
/// <returns></returns>
/// <remarks></remarks>
public static IntegrationResult CreateInitialIntegrationResult(string project, string workingDirectory, string artifactDirectory)
{
IntegrationRequest initialRequest = new IntegrationRequest(BuildCondition.ForceBuild, "Initial Build", null);
IntegrationResult result = new IntegrationResult(project, workingDirectory, artifactDirectory, initialRequest, IntegrationSummary.Initial);
result.StartTime = DateTime.Now.AddDays(-1);
result.EndTime = DateTime.Now;
return result;
}
开发者ID:kyser,项目名称:CruiseControl.NET,代码行数:16,代码来源:IntegrationResult.cs
示例17: Request
/// <summary>
/// Sends a build request to the server.
/// </summary>
/// <param name="projectName">The name of the project to use.</param>
/// <param name="integrationRequest"></param>
public override void Request(string projectName, IntegrationRequest integrationRequest)
{
if (string.IsNullOrEmpty(projectName)) throw new ArgumentNullException("projectName");
BuildIntegrationRequest request = new BuildIntegrationRequest(SessionToken, projectName);
request.BuildCondition = integrationRequest.BuildCondition;
request.ServerName = TargetServer;
Response resp = connection.SendMessage("ForceBuild", request);
ValidateResponse(resp);
}
开发者ID:derrills1,项目名称:ccnet_gitmode,代码行数:15,代码来源:CruiseServerClient.cs
示例18: FireMandlesMissingParameters
public void FireMandlesMissingParameters()
{
var request = new IntegrationRequest(BuildCondition.IfModificationExists, "test", null);
var innerTriggerMock = this.mocks.StrictMock<ITrigger>();
Expect.Call(innerTriggerMock.Fire()).Return(request);
var trigger = new ParameterTrigger
{
InnerTrigger = innerTriggerMock
};
mocks.ReplayAll();
var actual = trigger.Fire();
mocks.VerifyAll();
Assert.AreSame(request, actual);
Assert.AreEqual(0, request.BuildValues.Count);
}
开发者ID:kascomp,项目名称:CruiseControl.NET,代码行数:16,代码来源:ParameterTriggerTests.cs
示例19: SetUp
public void SetUp()
{
integrationQueues = new IntegrationQueueSet();
integrationQueues.Add(TestQueueName, new DefaultQueueConfiguration(TestQueueName));
integrationQueueUseFirst = integrationQueues[TestQueueName];
// Generate a queue to test re-adding
string secondQueueName = "Test Queue #2";
IQueueConfiguration readConfig = new DefaultQueueConfiguration(secondQueueName);
readConfig.HandlingMode = QueueDuplicateHandlingMode.ApplyForceBuildsReAdd;
integrationQueues.Add(secondQueueName, readConfig);
integrationQueueReAdd = integrationQueues[secondQueueName];
// Generate a queue to test re-adding to top
var fourthQueueName = "Test Queue #4";
var raddTopConfig = new DefaultQueueConfiguration(fourthQueueName);
raddTopConfig.HandlingMode = QueueDuplicateHandlingMode.ApplyForceBuildsReAddTop;
integrationQueues.Add(fourthQueueName, raddTopConfig);
integrationQueueReAddTop = integrationQueues[fourthQueueName];
// Generate a queue to test replacing
string thirdQueueName = "Test Queue #3";
IQueueConfiguration replaceConfig = new DefaultQueueConfiguration(thirdQueueName);
replaceConfig.HandlingMode = QueueDuplicateHandlingMode.ApplyForceBuildsReplace;
integrationQueues.Add(thirdQueueName, replaceConfig);
integrationQueueReplace = integrationQueues[thirdQueueName];
integrationRequestForceBuild = new IntegrationRequest(BuildCondition.ForceBuild, "Test", null);
integrationRequestIfModificationExists = new IntegrationRequest(BuildCondition.IfModificationExists, "Test", null);
project1Mock = new LatchMock(typeof (IProject));
project1Mock.Strict = true;
project1Mock.SetupResult("Name", "ProjectOne");
project1Mock.SetupResult("QueueName", TestQueueName);
project1Mock.SetupResult("QueuePriority", 0);
project2Mock = new LatchMock(typeof (IProject));
project2Mock.Strict = true;
project2Mock.SetupResult("Name", "ProjectTwo");
project2Mock.SetupResult("QueueName", TestQueueName);
project2Mock.SetupResult("QueuePriority", 0);
project3Mock = new LatchMock(typeof (IProject));
project3Mock.Strict = true;
project3Mock.SetupResult("Name", "ProjectThree");
project3Mock.SetupResult("QueueName", TestQueueName);
project3Mock.SetupResult("QueuePriority", 1);
queueNotifier1Mock = new LatchMock(typeof(IIntegrationQueueNotifier));
queueNotifier1Mock.Strict = true;
queueNotifier2Mock = new LatchMock(typeof(IIntegrationQueueNotifier));
queueNotifier2Mock.Strict = true;
queueNotifier3Mock = new LatchMock(typeof(IIntegrationQueueNotifier));
queueNotifier3Mock.Strict = true;
integrationQueueItem1 = new IntegrationQueueItem((IProject)project1Mock.MockInstance,
integrationRequestForceBuild, (IIntegrationQueueNotifier)queueNotifier1Mock.MockInstance);
integrationQueueItem2 = new IntegrationQueueItem((IProject)project2Mock.MockInstance,
integrationRequestForceBuild, (IIntegrationQueueNotifier)queueNotifier2Mock.MockInstance);
integrationQueueItem3 = new IntegrationQueueItem((IProject)project3Mock.MockInstance,
integrationRequestForceBuild, (IIntegrationQueueNotifier)queueNotifier3Mock.MockInstance);
integrationQueueItem4 = new IntegrationQueueItem((IProject)project2Mock.MockInstance,
integrationRequestIfModificationExists, (IIntegrationQueueNotifier)queueNotifier2Mock.MockInstance);
}
开发者ID:kascomp,项目名称:CruiseControl.NET,代码行数:69,代码来源:IntegrationQueueTest.cs
示例20: Integrate
/// <summary>
/// Integrates the specified request.
/// </summary>
/// <param name="request">The request.</param>
/// <returns></returns>
/// <remarks></remarks>
public IIntegrationResult Integrate(IntegrationRequest request)
{
Log.Trace();
this.target.InitialiseForBuild(request);
var result = this.StartNewIntegration(request);
IIntegrationResult lastResult = resultManager.LastIntegrationResult;
CreateDirectoryIfItDoesntExist(result.WorkingDirectory);
CreateDirectoryIfItDoesntExist(result.ArtifactDirectory);
Log.Trace("Getting Modifications for project {0}", result.ProjectName);
try
{
result.Modifications = GetModifications(lastResult, result);
}
catch (Exception error)
{
result.SourceControlError = error;
result.LastBuildStatus = lastResult.HasSourceControlError ? lastResult.LastBuildStatus : lastResult.Status;
Log.Warning(string.Format(System.Globalization.CultureInfo.CurrentCulture,"Source control failure (GetModifications): {0}", error.Message));
if (request.PublishOnSourceControlException)
{
result.ExceptionResult = error;
CompleteIntegration(result);
}
}
var runBuild = false;
try
{
// Check whether a build should be performed
runBuild = (result.SourceControlError == null) && result.ShouldRunBuild();
if (runBuild)
{
Log.Info("Building: " + request);
target.ClearNotNeededMessages();
// hack : otherwise all labellers(CCnet and custom) should be altered, better do this in 1 place
// labelers only increase version if PREVIOUS result was ok
// they should also increase version if previous was exception, and the new
// build got past the getmodifications
Log.Trace("Creating Label for project {0}", result.ProjectName);
if (result.LastIntegrationStatus == IntegrationStatus.Exception)
{
IntegrationSummary isExceptionFix = new IntegrationSummary(IntegrationStatus.Success, result.LastIntegration.Label, result.LastIntegration.LastSuccessfulIntegrationLabel, result.LastIntegration.StartTime);
IIntegrationResult irExceptionFix = new IntegrationResult(result.ProjectName, result.WorkingDirectory, result.ArtifactDirectory, result.IntegrationRequest, isExceptionFix);
irExceptionFix.Modifications = result.Modifications;
target.CreateLabel(irExceptionFix);
result.Label = irExceptionFix.Label;
}
else
{
target.CreateLabel(result);
}
Log.Trace("Running tasks of project {0}", result.ProjectName);
this.GenerateSystemParameterValues(result);
Build(result);
}
else if (lastResult.HasSourceControlError)
{
// Reset to the last valid status
result.Status = lastResult.LastBuildStatus;
resultManager.FinishIntegration();
}
}
catch (Exception ex)
{
Log.Debug("Exception caught: " + ex.Message);
result.ExceptionResult = ex;
}
finally
{
if (runBuild)
{
CompleteIntegration(result);
}
}
this.target.Activity = ProjectActivity.Sleeping;
return result;
}
开发者ID:kascomp,项目名称:CruiseControl.NET,代码行数:97,代码来源:IntegrationRunner.cs
注:本文中的ThoughtWorks.CruiseControl.Remote.IntegrationRequest类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论