내 WPF
응용 프로그램은 ClickOnce
과 함께 배포됩니다.NANT 스크립트를 사용한 ClickOnce 응용 프로그램 게시
Visual Studio
에서 "Project properties/Publish
"을 엽니 다. 이
내가 가진 : URL 게시
- 버전
- 서명
문제는 내가 테스트 및 생산을위한 모든 버전을 게시해야한다는이며, . 이들의 차이점은 publish location
및 publish URL
입니다. 현재 프로덕션을 위해 게시하기 전에 값을 변경하면서이 프로세스를 두 번 실행해야합니다.
따라서 publish를 누르면 "ApplicationFiles
"폴더, application manifest
파일 및 setup.exe
폴더가 포함 된 폴더가됩니다.
그런 다음 NANT를 사용하여이 프로세스를 자동화하기로 결정했습니다.
나는 게시자를 설정하지 않는 빌드를 발견이와
<target name="BuildTestApplication" depends="Clean" description="Build">
<echo message="Building..." />
<exec program="${msbuildExe}" workingdir="." verbose="true">
<arg value="${projectFile}" />
<arg value="/target:Clean;Publish" />
<arg value="/p:PublishDir=${testPublishFolder}" />
<arg value="/p:ApplicationVersion=${version}" />
<arg value="/p:Publisher="${publisherName}"" />
</exec>
<echo message="Built" />
</target>
(폴더 및 애플리케이션 varsion을 게시, 여기에 내가 .csproj 파일 위치를 설정) 테스트를 위해 먼저 응용 프로그램을 게시/구축 할 수 있습니다. 또한 애플리케이션이 인터넷을 통해 설치되기 때문에 제공자 URL을 변경해야합니다 (테스트 및 프로덕션을위한 다른 URL). 그래서 내가 그랬어 : 나는 올바른 값 (Publisher
및 ProviderUrl
)와 application manifest
파일을 업데이트 한이와
<target name="UpdateTestApplication" depends="BuildTestApplication" description="Update">
<echo message="Updating..." />
<exec program="${mageExe}" workingdir="." verbose="true">
<arg value="-Update" />
<arg value="${testPublishFolder}/EdpClient.application" />
<arg value="-ProviderUrl" />
<arg value=""${testPublishUrl}"" />
<arg value="-Publisher" />
<arg value=""${publisherName}"" />
</exec>
<echo message="Updated" />
</target>
...
나는 내가 다른 폴더로 응용 프로그램을 빌드 의미 생산 빌드 동일한 작업을 수행 및 이제 문제는setup.exe
파일입니다 ... 다른 ProviderUrl
로 업데이트하고 모든 mage
업데이트에 포함되어야하기 때문에, Publisher
를 추가합니다. Setup.exe
은 빌드시 생성되며 .csproj
파일에서 값을 가져옵니다. 1 올바른 매개 변수를 사용하여 응용 프로그램을 작성하는 방법이 있나요 때문에 setup.exe
올바른 값을 포함합니다 :
위의 모든 내가 세 가지 문제를 고려?
빌드하기 전에 어셈블리 정보 (매개 변수 버전)를 어떻게 업데이트합니까? VS
에서 게시 할 때 "Probject properties/Application/Assembly Information
"
3으로 업데이트해야합니다. VS
에서 게시 할 때 으로 게시하는 동안 "Application Files
"폴더에도 응용 프로그램 매니페스트 파일이 생성됩니다. 왜 그런가요?
편집 :
<!--UPDATE ASSEMBLY INFORMATION BEFORE BUILD-->
<target name="UpdateAssemblyInfo">
<asminfo output="${assemblyInfoFile}" language="CSharp">
<imports>
<import namespace="System" />
<import namespace="System.Reflection" />
<import namespace="System.Resources" />
<import namespace="System.Runtime.CompilerServices" />
<import namespace="System.Runtime.InteropServices" />
<import namespace="System.Windows" />
</imports>
<attributes>
<attribute type="AssemblyTitleAttribute" value="some value" />
<attribute type="AssemblyDescriptionAttribute" value="some value" />
<attribute type="AssemblyConfigurationAttribute" value="some value" />
<attribute type="AssemblyCompanyAttribute" value="some value" />
<attribute type="AssemblyProductAttribute" value="some value" />
<attribute type="AssemblyVersionAttribute" value="some value" />
<attribute type="AssemblyFileVersionAttribute" value="some value" />
<attribute type="AssemblyCopyrightAttribute" value="some value" />
<attribute type="AssemblyTrademarkAttribute" value="some value" />
<attribute type="AssemblyCultureAttribute" value="some value" />
<attribute type="CLSCompliantAttribute" value="boolean value" />
<attribute type="ComVisibleAttribute" value="boolean value" />
</attributes>
</asminfo>
<echo file="${assemblyInfoFile}" append="true">
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]
</echo>
<echo message="Updated" />
</target>
내가 빌드하기 전에 Assembly.info
파일을 오버라이드 (override) 의미 : 나는 문제 # 그래서 추천을 고정
관련 값을 추가하십시오.
그리고 문제 #3
과 같이 :
<!--COPY APPLICATION MANIFEST TO APPLICATIONFILES FOLDER-->
<target name="CopyTestApplicationManifestToApplicationFilesFolder" depends="Dependency target name" description="Update">
<echo message="Copying..." />
<copy
file="source file"
tofile="target file" />
<echo message="Copied" />
</target>
콘솔 응용 프로그램을 빌드하고 사용하기 전에 건물 자체에 대한 콘솔 응용 프로그램을 호출하는 것이 가능한 해결책일까요? 아니면 NANT가 될까요? – Herdo