我有一个C#项目。构建之后,需要部署4个文件:
这些文件和MyProj的引用dll位于输出目录bin/Release
中。
我想自定义输出目录(部署遵循此目录层次结构):
+bin/Release
|--MyProj.exe
|--MyProj.exe.config
|--MyProj.pdb
|--MyProj.XML
|--+lib
|--|--<MyProj's refer dll>
|--+plugin
|--|--<empty directory. before deployment, I'll copy into there manually>
|--+Help
|--|--<empty directory. before deployment, I'll copy into there manually>
(当然,probingPath="lib"
中有MyProj.exe.config
。)
到现在为止,我手动制作目录。但我想自动这样做。有没有办法通过Visual Studio自动执行此操作?
我想将MyProj部署到ClickOnce。我可以将此目录层次结构(包含我在plugin/
和Help/
内手动复制的文件)部署到ClickOnce吗?
答案 0 :(得分:1)
您可以通过调用MSBuild中的Copy
任务来自动执行此操作。右键单击并选择“卸载”后,通过在Visual Studio IDE中打开.csproj
来执行此操作。然后再次右键单击并编辑.csproj
文件,该文件将以文本/ XML格式显示.csproj
文件。
然后粘贴以下内容并将其更改为您的特定要求。请注意,目标是AfterBuild
。
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<PropertyGroup>
<YourDestinationDirectory>..\SomeDestinationDirectory</YourDestinationDirectory>
<YourSourceDirectory>..\SomeSourceDirectory</YourSourceDirectory>
</PropertyGroup>
<Target Name="AfterBuild">
<CreateItem Include="$(YourSourceDirectory)\**\*.*">
<Output TaskParameter="Include" ItemName="YourFilesToCopy" />
</CreateItem>
<Copy SourceFiles="@(YourFilesToCopy)"
DestinationFiles="@(YourFilesToCopy->'$(YourDestinationDirectory)\%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>
</Project>
您可以通过打开Visual Studio命令提示符并针对项目文件运行MSBUILD.exe来轻松测试MSBUILD
更改。这样做是1比1,所以你可以立即发现任何错误。
答案 1 :(得分:1)
我的建议是在解决方案文件中创建所需的所有文件夹(因此它们将由Visual Studio管理) - 然后设置单击这些文件夹中文件的“属性”,并设置Build Action
Content
和Copy to Output Directory
为Copy if Newer
:
我一直使用这个技巧来确保在BIN
文件夹中创建文件和文件夹,我可以在以后使用它们。
这样做的另一个好处是您不需要修改构建步骤以便通过ClickOnce处理这些文件 - 只需转到项目属性 - &gt;发布 - &gt;应用程序文件 - 并为您需要的文件将Publish Status
设置为“包含”。它们将与您的应用一起部署。
答案 2 :(得分:0)
在Visual Studio中,您可以右键单击项目并转到属性。在项目属性中,单击“构建”选项卡。这里可以自定义您的输出位置。同样在“构建事件”选项卡下,您可以执行命令以执行准备或后期构建工作。