Чтобы выполнить ваше требование, вы должны установить «.NET Core SDK» в виртуальной машине Azure Jenkins Linux, а затем просто использовать шаг сборки «Выполнить оболочку» с помощью команды «dotnet build ContinuousIntegration / ContinuousIntegration.sln»
Чтобы установить «.NET Core SDK» на виртуальной машине Azure Jenkins Linux, перейдите на https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/install и нажмите на «Linux» на этой странице, а затем выберите необходимый дистрибутив Linux и следуйте приведенным инструкциям.
Для получения дополнительной информации о поддержке MSBuild в различных операционных системах см. https://github.com/Microsoft/msbuild/blob/master/documentation/wiki/Building-Testing-and-Debugging-on-. Net-Core-MSBuild.md
Просто к вашему сведению, я протестировал и воспроизвел ваш сценарий и столкнулся с той же ошибкой, о которой вы упомянули, а затем я выполнил описанный выше процесс и успешно решил проблему. Надеюсь, это поможет. Cheers !!
PS: в вашем скрипте оболочки вы должны перейти в нужную папку, чтобы это работало.
Quick and dirty was what I needed, folks. And thanks to HBoss I was able to come up with a very simple solution. On the code-behind of the page in question, I just added this subroutine...
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
Dim Html As New StringWriter()
Dim Render As New HtmlTextWriter(Html)
MyBase.Render(Render)
writer.Write(Html.ToString().Replace("name=""ctl00$ContentBody$", "name=""").Replace("id=""ctl00_ContentBody_", "id="""))
End Sub
Small consolation for right now, but this "feature" will be fixed in Asp.Net 4.0. You will get settable ClientID property.
Other than that, the other responses are good.
Use <%= control.ClientID %>
or throw in JQuery and use $("[id$='myId'])
Or, on your input tags, don't put runtime='server'. You should be able to retrieve the values via the Form member (just like in traditional asp)
Or, skip Asp.Net WebForms and skip to Asp.Net MVC, which gives you complete control of the HTML markup that is generated. You have to change how you are doing things a bit more, but that might be less frustrating for you.
Поскольку кажется, что вы просто пытаетесь удалить идентификаторы клиента из окончательного вывода, вы можете переопределить событие визуализации на своей странице и использовать регулярное выражение для удаления их. Вы можете увидеть пример в сообщении ниже.
Перепишите вывод страницы ASP.NET
После того, как вы получите текст, с которым работаете, вы, скорее всего, можете написать что-то вроде ...
output = Regex.Replace(
output,
@"id\=""ctl00\$[^\""]*""",
string.Empty,
RegexOptions.IgnoreCase
);
А затем напишите окончательный вывод в HtmlTextWriter.
Надеюсь, что это поможет.
I know of no way to remove the naming container from being prepended to the control id. In the past I've used a convenience method to look up such ids in javascript that iterates through the tag names and uses a regular expression to match the one that ends with $realID
, where realID
is the id that I gave to the control in mark up. Now, I would use jQuery for this using a selector like:
$('[id$="realID"]')
Which basically does the same thing as my old convenience method, but it's built into the framework.
Насколько мне известно, их нельзя удалить по той причине, по которой вы сказали; чтобы убедиться, что они уникальны. На мой взгляд, у вас есть два варианта:
С # 1, если какой-либо из ваших входных данных находится в любом другом теге сервера, он не будет работать. Это предрасположено к множеству проблем, поэтому я бы выбрал № 2.
2 зависит либо от того, находится ли javascript на самой странице, либо от того, является ли JS внешним, вы должны иметь возможность передавать идентификаторы. Этот код не тестировался и предназначен только для примера, но я имею в виду следующее:
function alertValue(textID){
alert(document.GetElementById(textID).value);
}
<input id="txtBox" runat="server" type="Button" text="Click Me" onClick="alertValue('<%= txtBox.ClientID %>');" />
Это действительно зависит от того, как ваш JS реализован.